@module-federation/enhanced
Version:
This package provides enhanced features for module federation.
74 lines (72 loc) • 4.2 kB
JavaScript
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
const require_runtime = require('../_virtual/_rolldown/runtime.js');
const require_wrapper_BaseWrapperPlugin = require('./BaseWrapperPlugin.js');
let _module_federation_sdk = require("@module-federation/sdk");
let node_path = require("node:path");
node_path = require_runtime.__toESM(node_path);
let node_fs = require("node:fs");
node_fs = require_runtime.__toESM(node_fs);
let _module_federation_bridge_react_webpack_plugin = require("@module-federation/bridge-react-webpack-plugin");
_module_federation_bridge_react_webpack_plugin = require_runtime.__toESM(_module_federation_bridge_react_webpack_plugin);
//#region src/wrapper/ModuleFederationPlugin.ts
const PLUGIN_NAME = "ModuleFederationPlugin";
var ModuleFederationPlugin = class extends require_wrapper_BaseWrapperPlugin.default {
constructor(options) {
super(options, PLUGIN_NAME, "../lib/container/ModuleFederationPlugin");
}
createCorePluginInstance(CorePlugin, compiler) {
(0, _module_federation_sdk.bindLoggerToCompiler)(_module_federation_sdk.infrastructureLogger, compiler, "EnhancedModuleFederationPlugin");
this._mfPlugin = new CorePlugin(this._options);
this._mfPlugin.apply(compiler);
const checkBridgeReactInstalled = () => {
try {
const userPackageJsonPath = node_path.default.resolve(compiler.context, "package.json");
if (node_fs.default.existsSync(userPackageJsonPath)) {
const userPackageJson = JSON.parse(node_fs.default.readFileSync(userPackageJsonPath, "utf-8"));
return !!{
...userPackageJson.dependencies,
...userPackageJson.devDependencies
}["@module-federation/bridge-react"];
}
return false;
} catch (error) {
return false;
}
};
const hasBridgeReact = checkBridgeReactInstalled();
const shouldEnableBridgePlugin = () => {
if (this._options?.bridge?.enableBridgeRouter === true) return true;
if (this._options?.bridge?.enableBridgeRouter === false || this._options?.bridge?.disableAlias === true) {
if (this._options?.bridge?.disableAlias === true) _module_federation_sdk.infrastructureLogger.warn("⚠️ [ModuleFederationPlugin] The `disableAlias` option is deprecated and will be removed in a future version.\n Please use `enableBridgeRouter: false` instead:\n {\n bridge: {\n enableBridgeRouter: false // Use this instead of disableAlias: true\n }\n }");
return false;
}
if (hasBridgeReact) {
_module_federation_sdk.infrastructureLogger.info("💡 [ModuleFederationPlugin] Detected @module-federation/bridge-react in your dependencies.\n For better control and to avoid future breaking changes, please explicitly set:\n {\n bridge: {\n enableBridgeRouter: true // Explicitly enable bridge router\n }\n }");
return true;
}
return false;
};
const enableBridgePlugin = shouldEnableBridgePlugin();
if (!enableBridgePlugin && hasBridgeReact) compiler.hooks.afterPlugins.tap("BridgeReactBaseAliasPlugin", () => {
try {
const bridgeReactBasePath = node_path.default.resolve(compiler.context, "node_modules/@module-federation/bridge-react/dist/base.es.js");
if (!node_fs.default.existsSync(bridgeReactBasePath)) {
_module_federation_sdk.infrastructureLogger.warn("⚠️ [ModuleFederationPlugin] bridge-react /base entry not found, falling back to default entry");
return;
}
compiler.options.resolve.alias = {
...compiler.options.resolve.alias,
"@module-federation/bridge-react$": bridgeReactBasePath
};
_module_federation_sdk.infrastructureLogger.info("✅ [ModuleFederationPlugin] Router disabled - using /base entry (no react-router-dom)");
} catch (error) {
_module_federation_sdk.infrastructureLogger.warn("⚠️ [ModuleFederationPlugin] Failed to set /base alias, using default entry");
}
});
if (enableBridgePlugin) new _module_federation_bridge_react_webpack_plugin.default({ moduleFederationOptions: this._options }).apply(compiler);
}
};
//#endregion
exports.PLUGIN_NAME = PLUGIN_NAME;
exports.default = ModuleFederationPlugin;
//# sourceMappingURL=ModuleFederationPlugin.js.map