UNPKG

@nx/module-federation

Version:

The Nx Plugin for Module Federation contains executors and utilities that support building applications using Module Federation.

75 lines (74 loc) 3.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.withModuleFederation = withModuleFederation; const utils_1 = require("../../utils"); const utils_2 = require("./utils"); const webpack_1 = require("@module-federation/enhanced/webpack"); async function withModuleFederation(options, configOverride) { if (global.NX_GRAPH_CREATION) { return (config) => config; } const isDevServer = process.env['WEBPACK_SERVE']; const { sharedLibraries, sharedDependencies, mappedRemotes } = await (0, utils_2.getModuleFederationConfig)(options); return (config) => { const updatedConfig = { ...(config ?? {}), output: { ...(config.output ?? {}), uniqueName: options.name, publicPath: 'auto', }, optimization: { ...(config.optimization ?? {}), runtimeChunk: isDevServer && !options.exposes ? config.optimization?.runtimeChunk ?? undefined : false, }, resolve: { ...(config.resolve ?? {}), alias: { ...(config.resolve?.alias ?? {}), ...sharedLibraries.getAliases(), }, }, experiments: { ...(config.experiments ?? {}), outputModule: true, }, plugins: [ ...(config.plugins ?? []), new webpack_1.ModuleFederationPlugin({ name: (0, utils_1.normalizeProjectName)(options.name), filename: 'remoteEntry.mjs', exposes: options.exposes, remotes: mappedRemotes, shared: { ...sharedDependencies, }, library: { type: 'module', }, /** * Apply user-defined config override */ ...(configOverride ? configOverride : {}), runtimePlugins: process.env.NX_MF_DEV_REMOTES && !options.disableNxRuntimeLibraryControlPlugin ? [ ...(configOverride?.runtimePlugins ?? []), require.resolve('@nx/module-federation/src/utils/plugins/runtime-library-control.plugin.js'), ] : configOverride?.runtimePlugins, virtualRuntimeEntry: true, }), sharedLibraries.getReplacementPlugin(), ], }; // The env var is only set from the module-federation-dev-server // Attach the runtime plugin updatedConfig.plugins.push(new (require('webpack').DefinePlugin)({ 'process.env.NX_MF_DEV_REMOTES': process.env.NX_MF_DEV_REMOTES, })); return updatedConfig; }; }