UNPKG

@module-federation/enhanced

Version:

This package provides enhanced features for module federation.

94 lines (92 loc) 4.86 kB
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } }); const require_runtime = require('../../../../_virtual/_rolldown/runtime.js'); const require_lib_container_runtime_utils = require('../../../container/runtime/utils.js'); const require_lib_container_runtime_FederationRuntimeModule = require('../../../container/runtime/FederationRuntimeModule.js'); const require_lib_sharing_tree_shaking_SharedContainerPlugin_SharedDependency = require('./SharedDependency.js'); const require_lib_sharing_tree_shaking_SharedContainerPlugin_SharedEntryDependency = require('./SharedEntryDependency.js'); const require_lib_sharing_tree_shaking_SharedContainerPlugin_SharedEntryModuleFactory = require('./SharedEntryModuleFactory.js'); let _module_federation_sdk = require("@module-federation/sdk"); let _module_federation_sdk_normalize_webpack_path = require("@module-federation/sdk/normalize-webpack-path"); //#region src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedContainerPlugin.ts const EntryDependency = require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack/lib/dependencies/EntryDependency")); const PLUGIN_NAME = "SharedContainerPlugin"; const HOT_UPDATE_SUFFIX = ".hot-update"; var SharedContainerPlugin = class { constructor(options) { this.name = PLUGIN_NAME; this.filename = ""; const { mfName, shareName, request, library, independentShareFileName } = options; const version = options.version || "0.0.0"; this._globalName = (0, _module_federation_sdk.encodeName)(`${mfName}_${shareName}_${version}`); const fileName = independentShareFileName || `${version}/share-entry.js`; this._shareName = shareName; this._options = { name: shareName, request, library: (library ? { ...library, name: this._globalName } : void 0) || { type: "global", name: this._globalName }, version, fileName }; } getData() { return [ this.filename, this._globalName, this._options.version ]; } apply(compiler) { const { library, name, request, fileName } = this._options; if (library.type && compiler.options.output && compiler.options.output.enabledLibraryTypes && !compiler.options.output.enabledLibraryTypes.includes(library.type)) compiler.options.output.enabledLibraryTypes.push(library.type); compiler.hooks.make.tapAsync(PLUGIN_NAME, async (compilation, callback) => { const dep = new require_lib_sharing_tree_shaking_SharedContainerPlugin_SharedEntryDependency.default(name, request); dep.loc = { name }; compilation.addEntry(compilation.options.context || "", dep, { name, filename: fileName, library: { type: library.type, name: this._globalName } }, (error) => { if (error) throw error; }); callback(); }); compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation, { normalModuleFactory }) => { compilation.dependencyFactories.set(require_lib_sharing_tree_shaking_SharedContainerPlugin_SharedEntryDependency.default, new require_lib_sharing_tree_shaking_SharedContainerPlugin_SharedEntryModuleFactory.default()); compilation.dependencyFactories.set(require_lib_sharing_tree_shaking_SharedContainerPlugin_SharedDependency.default, normalModuleFactory); if (!compilation.dependencyFactories.has(EntryDependency)) compilation.dependencyFactories.set(EntryDependency, normalModuleFactory); compilation.hooks.additionalTreeRuntimeRequirements.tap(PLUGIN_NAME, (chunk, set) => { set.add(require_lib_container_runtime_utils.getFederationGlobalScope(compiler.webpack.RuntimeGlobals)); set.add(compiler.webpack.RuntimeGlobals.runtimeId); compilation.addRuntimeModule(chunk, new require_lib_container_runtime_FederationRuntimeModule.default(set, name, { name, remotes: [] })); }); compilation.hooks.processAssets.tapPromise({ name: "getManifestFileName", stage: compilation.constructor.PROCESS_ASSETS_STAGE_OPTIMIZE_TRANSFER }, async () => { (0, _module_federation_sdk.assert)(compilation.entrypoints.get(name), `Can not get shared ${name} entryPoint!`); const remoteEntryNameChunk = compilation.namedChunks.get(name); (0, _module_federation_sdk.assert)(remoteEntryNameChunk, `Can not get shared ${name} chunk!`); const files = Array.from(remoteEntryNameChunk.files).filter((f) => !f.includes(HOT_UPDATE_SUFFIX) && !f.endsWith(".css")); (0, _module_federation_sdk.assert)(files.length > 0, `no files found for shared ${name} chunk`); (0, _module_federation_sdk.assert)(files.length === 1, `shared ${name} chunk should not have multiple files!, current files: ${files.join(",")}`); this.filename = files[0]; }); }); } }; //#endregion exports.PLUGIN_NAME = PLUGIN_NAME; exports.default = SharedContainerPlugin; //# sourceMappingURL=SharedContainerPlugin.js.map