diff --git a/docusaurus/docs/webpack-module-federation.md b/docusaurus/docs/webpack-module-federation.md new file mode 100644 index 00000000000..2d700189310 --- /dev/null +++ b/docusaurus/docs/webpack-module-federation.md @@ -0,0 +1,21 @@ +--- +id: webpack-module-federation +title: Webpack Module Federation +--- + +[Webpack Module Federation](https://webpack.js.org/concepts/module-federation) is a feature made available in Webpack 5. + +## Configuring Webpack Module Federation +To get started, create `src/setupModuleFederation.js` and place the following contents in it: +```js +module.exports = { + name: 'test', + library: { type: 'var', name: 'test' }, + filename: 'remoteEntry.js', + exposes: { '.': './src/App.js' } +} +``` + +You can now modify this configuration to suit your needs. [See here](https://webpack.js.org/plugins/module-federation-plugin#sharing-hints) for Module Federation Plugin's configuraiton options. + +> **Note:** Since Micro-frontend apps do not typically have their own `index.html` (unless they're using iframes), the `index.html` file in the public folder is an optional file and can be removed if not applicable to your app. diff --git a/docusaurus/website/sidebars.json b/docusaurus/website/sidebars.json index 386a29da1bf..1d8d7df80fb 100644 --- a/docusaurus/website/sidebars.json +++ b/docusaurus/website/sidebars.json @@ -48,6 +48,7 @@ ], "Deployment": ["deployment"], "Advanced Usage": [ + "webpack-module-federation", "custom-templates", "can-i-use-decorators", "pre-rendering-into-static-html-files", diff --git a/packages/react-scripts/config/paths.js b/packages/react-scripts/config/paths.js index f4470a02f63..30a8330c5c3 100644 --- a/packages/react-scripts/config/paths.js +++ b/packages/react-scripts/config/paths.js @@ -72,6 +72,7 @@ module.exports = { appJsConfig: resolveApp('jsconfig.json'), yarnLockFile: resolveApp('yarn.lock'), testsSetup: resolveModule(resolveApp, 'src/setupTests'), + mfSetup: resolveApp('src/setupModuleFederation.js'), proxySetup: resolveApp('src/setupProxy.js'), appNodeModules: resolveApp('node_modules'), appWebpackCache: resolveApp('node_modules/.cache'), @@ -97,6 +98,7 @@ module.exports = { appJsConfig: resolveApp('jsconfig.json'), yarnLockFile: resolveApp('yarn.lock'), testsSetup: resolveModule(resolveApp, 'src/setupTests'), + mfSetup: resolveApp('src/setupModuleFederation.js'), proxySetup: resolveApp('src/setupProxy.js'), appNodeModules: resolveApp('node_modules'), appWebpackCache: resolveApp('node_modules/.cache'), @@ -135,6 +137,7 @@ if ( appJsConfig: resolveOwn(`${templatePath}/jsconfig.json`), yarnLockFile: resolveOwn(`${templatePath}/yarn.lock`), testsSetup: resolveModule(resolveOwn, `${templatePath}/src/setupTests`), + mfSetup: resolveOwn(`${templatePath}/src/setupModuleFederation.js`), proxySetup: resolveOwn(`${templatePath}/src/setupProxy.js`), appNodeModules: resolveOwn('node_modules'), appWebpackCache: resolveOwn('node_modules/.cache'), diff --git a/packages/react-scripts/config/webpack.config.js b/packages/react-scripts/config/webpack.config.js index e465d8e7a00..e772ca9f552 100644 --- a/packages/react-scripts/config/webpack.config.js +++ b/packages/react-scripts/config/webpack.config.js @@ -605,43 +605,46 @@ module.exports = function (webpackEnv) { }, plugins: [ // Generates an `index.html` file with the