infly-libs
Version:
工具组件库
36 lines (31 loc) • 1.2 kB
JavaScript
// build/InlineRuntimePlugin.js
class InlineRuntimePlugin {
apply(compiler) {
compiler.hooks.compilation.tap("InlineRuntimePlugin", (compilation) => {
const HtmlWebpackPlugin = compiler.options.plugins.find(
(plugin) => plugin.constructor && plugin.constructor.name === "HtmlWebpackPlugin"
)?.constructor;
if (!HtmlWebpackPlugin) return;
HtmlWebpackPlugin.getHooks(compilation).alterAssetTagGroups.tap("InlineRuntimePlugin", (assets) => {
assets.headTags = this.inlineRuntime(assets.headTags, compilation.assets);
assets.bodyTags = this.inlineRuntime(assets.bodyTags, compilation.assets);
});
});
}
inlineRuntime(tags, assets) {
return tags.map((tag) => {
if (tag.tagName === "script" && tag.attributes?.src && /runtime\..*\.js$/.test(tag.attributes.src)) {
const filename = tag.attributes.src.replace(/^\//, "");
if (assets[filename]) {
return {
tagName: "script",
innerHTML: assets[filename].source(),
closeTag: true
};
}
}
return tag;
});
}
}
module.exports = InlineRuntimePlugin;