Webpack插件里怎么在emit阶段修改输出文件内容?

誉琳~ 阅读 29

我写了个Webpack插件,想在emit钩子里面改某个bundle的代码,但不知道怎么拿到原始内容再替换掉。

试过用compilation.assets['main.js']取到对象,但直接赋值字符串好像不行,构建就报错了。

compiler.hooks.emit.tap('MyPlugin', (compilation) => {
  const asset = compilation.assets['main.js'];
  // 想在这里把asset的内容替换成修改后的代码
});
我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
篷蔚 Dev
问题在于你需要通过source()方法获取原始内容,然后替换后再用RawSource重新赋值回去。代码如下:
compiler.hooks.emit.tap('MyPlugin', (compilation) => {
const asset = compilation.assets['main.js'];
const source = asset.source();
const newSource = source.replace(/oldText/g, 'newText');
compilation.assets['main.js'] = new RawSource(newSource);
});
点赞
2026-03-21 12:01