12345678910111213141516171819202122232425262728293031323334353637383940 |
- const webpack = require("webpack");
- class ReplaceCssPlugin {
- constructor(options) {
- this.options = options
- }
- apply(compiler) {
- compiler.hooks.emit.tapAsync(
- "ReplaceCssPlugin",
- (compilation, callback) => {
- // 遍历所有编译后的资源
- Object.keys(compilation.assets).forEach((filename) => {
- if (filename.endsWith(".css")) {
- // 替换:root 变为:host 支持沙盒不然 element css 不生效
- const originalContent = compilation.assets[filename].source();
- //这node-sass 有buffer类型所以排除一下
- const replacedContent = originalContent && !Buffer.isBuffer(originalContent) ? originalContent.replace(
- /:root\{/g,
- ":root,:host{"
- ): originalContent;
- // 重写资源内容
- compilation.assets[filename] = {
- source: () => replacedContent,
- size: () => replacedContent.length,
- };
- }
- });
- callback();
- }
- );
- compiler.hooks.done.tap("compilation", () => {
- console.log("compilation");
- });
- }
- }
- module.exports = ReplaceCssPlugin;
|