@module-federation/enhanced
Version:
This package provides enhanced features for module federation.
60 lines (57 loc) • 3.86 kB
JavaScript
;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
const require_runtime = require('../../_virtual/_rolldown/runtime.js');
const require_lib_container_ContainerEntryModule = require('../container/ContainerEntryModule.js');
const require_lib_startup_StartupHelpers = require('./StartupHelpers.js');
let _module_federation_sdk_normalize_webpack_path = require("@module-federation/sdk/normalize-webpack-path");
//#region src/lib/startup/MfStartupChunkDependenciesPlugin.ts
const { RuntimeGlobals } = require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack"));
const StartupEntrypointRuntimeModule = require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack/lib/runtime/StartupEntrypointRuntimeModule"));
var StartupChunkDependenciesPlugin = class {
constructor(options) {
this.asyncChunkLoading = options.asyncChunkLoading ?? true;
}
isEnabledForChunk(chunk, compilation) {
if (chunk.id === "build time chunk") return false;
const [finalEntry] = Array.from(compilation.chunkGraph.getChunkEntryModulesIterable(chunk)).reverse() || [];
return !(finalEntry instanceof require_lib_container_ContainerEntryModule.default);
}
apply(compiler) {
compiler.hooks.thisCompilation.tap("MfStartupChunkDependenciesPlugin", (compilation) => {
compilation.hooks.additionalTreeRuntimeRequirements.tap("StartupChunkDependenciesPlugin", (chunk, set, { chunkGraph }) => {
if (!this.isEnabledForChunk(chunk, compilation)) return;
if (chunk.hasRuntime()) {
set.add(RuntimeGlobals.startupEntrypoint);
set.add(RuntimeGlobals.ensureChunk);
set.add(RuntimeGlobals.ensureChunkIncludeEntries);
}
});
compilation.hooks.additionalChunkRuntimeRequirements.tap("MfStartupChunkDependenciesPlugin", (chunk, set, { chunkGraph }) => {
if (!this.isEnabledForChunk(chunk, compilation)) return;
if (chunkGraph.getNumberOfEntryModules(chunk) === 0) return;
set.add(require_lib_startup_StartupHelpers.federationStartup);
});
compilation.hooks.runtimeRequirementInTree.for(RuntimeGlobals.startupEntrypoint).tap("StartupChunkDependenciesPlugin", (chunk, set, { chunkGraph }) => {
if (!this.isEnabledForChunk(chunk, compilation)) return;
set.add(RuntimeGlobals.require);
set.add(RuntimeGlobals.ensureChunk);
set.add(RuntimeGlobals.ensureChunkIncludeEntries);
compilation.addRuntimeModule(chunk, new StartupEntrypointRuntimeModule(this.asyncChunkLoading));
});
const { renderStartup } = compiler.webpack.javascript.JavascriptModulesPlugin.getCompilationHooks(compilation);
renderStartup.tap("MfStartupChunkDependenciesPlugin", (startupSource, lastInlinedModule, renderContext) => {
const { chunk, chunkGraph, runtimeTemplate } = renderContext;
if (!this.isEnabledForChunk(chunk, compilation)) return startupSource;
if (chunkGraph.getNumberOfEntryModules(chunk) === 0) return startupSource;
const treeRuntimeRequirements = chunkGraph.getTreeRuntimeRequirements(chunk);
if (!(chunkGraph.getChunkRuntimeRequirements(chunk).has(require_lib_startup_StartupHelpers.federationStartup) || treeRuntimeRequirements.has(require_lib_startup_StartupHelpers.federationStartup))) return startupSource;
const entryModules = Array.from(chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk));
const entryGeneration = runtimeTemplate.outputOptions.module ? require_lib_startup_StartupHelpers.generateESMEntryStartup : require_lib_startup_StartupHelpers.generateEntryStartup;
return new compiler.webpack.sources.ConcatSource(entryGeneration(compilation, chunkGraph, runtimeTemplate, entryModules, chunk, false));
});
});
}
};
//#endregion
exports.default = StartupChunkDependenciesPlugin;
//# sourceMappingURL=MfStartupChunkDependenciesPlugin.js.map