react-scripts-intlayer
Version:
Integrate Intlayer with Create React App using custom React scripts for internationalization i18n and advanced Webpack configurations
77 lines • 2.54 kB
JavaScript
import "./chunk-ZD7AOCMD.mjs";
import { resolve, relative, join } from "path";
import { getConfiguration, ESMxCJSRequire } from "@intlayer/config";
import { IntlayerPlugin as IntlayerWebpackPlugin } from "@intlayer/webpack";
const intlayerConfig = getConfiguration();
const overrideWebpackConfig = ({
webpackConfig
}) => {
webpackConfig.externals = {
...typeof webpackConfig.externals === "object" ? webpackConfig.externals : {},
esbuild: "esbuild"
// keep only esbuild external
};
delete webpackConfig.externals.module;
delete webpackConfig.externals.fs;
delete webpackConfig.externals.path;
delete webpackConfig.externals.vm;
webpackConfig.module.rules.push({
test: /\.node$/,
use: "node-loader"
});
return webpackConfig;
};
const overrideCracoConfig = ({
cracoConfig
}) => {
const { mainDir, baseDir, configDir } = intlayerConfig.content;
const dictionariesPath = join(mainDir, "dictionaries.mjs");
const relativeDictionariesPath = relative(baseDir, dictionariesPath);
const configurationPath = join(configDir, "configuration.json");
const relativeConfigurationPath = relative(baseDir, configurationPath);
return {
...cracoConfig,
webpack: {
...cracoConfig.webpack,
plugins: {
...cracoConfig.webpack?.plugins,
// Ensure we actually add IntlayerWebpackPlugin
add: [
...cracoConfig.webpack?.plugins?.add ?? [],
new IntlayerWebpackPlugin()
]
},
configure: {
...cracoConfig.webpack?.configure ?? {},
resolve: {
...cracoConfig.webpack?.configure?.resolve ?? {},
// 3) Provide browser fallbacks so these modules won’t error out in the browser.
fallback: {
...cracoConfig.webpack?.configure?.resolve?.fallback ?? {},
process: ESMxCJSRequire.resolve("process/browser"),
fs: false,
module: false,
path: false,
vm: false
}
}
},
// 4) Alias @intlayer/dictionaries-entry so it no longer tries to use the ESM that depends on `fs`, etc.
alias: {
...cracoConfig.webpack?.alias,
"@intlayer/dictionaries-entry": resolve(relativeDictionariesPath),
"@intlayer/config/built": resolve(relativeConfigurationPath)
}
}
};
};
const intlayerCracoPlugin = {
overrideCracoConfig,
overrideWebpackConfig
};
export {
intlayerCracoPlugin,
overrideCracoConfig,
overrideWebpackConfig
};
//# sourceMappingURL=intlayerCracoPlugin.mjs.map