Skip to content

Instantly share code, notes, and snippets.

@yordis
Forked from ScriptedAlchemy/MutateRuntimePlugin.js
Created June 16, 2020 13:27
Show Gist options
  • Save yordis/da17c08c0e18cc95f361205f267c67d4 to your computer and use it in GitHub Desktop.
Save yordis/da17c08c0e18cc95f361205f267c67d4 to your computer and use it in GitHub Desktop.
Remote PublicPath Modification
const PLUGIN_NAME = "MutateRuntimePlugin";
class MutateRuntimePlugin {
/**
*
* @param {FederationDashboardPluginOptions} options
*/
constructor(options) {}
/**
* @param {Compiler} compiler
*/
apply(compiler) {
const FederationPlugin = compiler.options.plugins.find((plugin) => {
return plugin.constructor.name === "ModuleFederationPlugin";
});
let FederationPluginOptions;
if (FederationPlugin) {
FederationPluginOptions = FederationPlugin._options;
}
compiler.hooks.make.tap("MutateRuntime", (compilation) => {
compilation.hooks.runtimeModule.tap("MutateRuntime", (module, chunk) => {
if (
module.constructor.name === "PublicPathRuntimeModule" &&
chunk.name === FederationPluginOptions.name
) {
const iffy = [
"+ (function(){",
"try {",
"return window.versions[window.versions.currentHost].override.find(function(override){return override.name === '" +
FederationPluginOptions.name +
"'}).version + '/'",
"} catch(e) {",
"console.warn(e);",
'return ""',
"}",
"})();",
].join("");
const generatedCode = module.getGeneratedCode();
const splitGeneration = generatedCode.split("=");
module._cachedGeneratedCode = generatedCode.replace(
splitGeneration[1],
splitGeneration[1].split(";")[0] + iffy
);
console.log(module._cachedGeneratedCode);
return module;
}
});
});
compiler.hooks.done.tap("MutateRuntime", () => {
// debugger;
});
}
}
module.exports = MutateRuntimePlugin;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment