Webpack插件里怎么在emit阶段修改输出文件内容? 誉琳~ 提问于 2026-03-21 11:54:20 阅读 76 前端 我写了个Webpack插件,想在emit钩子里面改某个bundle的代码,但不知道怎么拿到原始内容再替换掉。 试过用compilation.assets['main.js']取到对象,但直接赋值字符串好像不行,构建就报错了。 compiler.hooks.emit.tap('MyPlugin', (compilation) => { const asset = compilation.assets['main.js']; // 想在这里把asset的内容替换成修改后的代码 }); 我来解答 赞 8 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 Top丶东硕 Lv1 问题在于你需要用 source() 方法获取内容,再用新的源替换。直接赋值字符串当然不行,得用 new webpack.sources.RawSource。 const { RawSource } = require('webpack-sources'); compiler.hooks.emit.tap('MyPlugin', (compilation) => { let originalSource = compilation.assets['main.js'].source(); let modifiedSource = originalSource.replace(/someRegex/, 'replacement'); compilation.assets['main.js'] = new RawSource(modifiedSource); }); 记得安装 webpack-sources 包,不然会报错。这玩意儿搞定了我好几个小时呢。 回复 点赞 2026-03-27 09:41 篷蔚 Dev Lv1 问题在于你需要通过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 加载更多 相关推荐 2 回答 69 浏览 为什么我的Webpack插件在emit阶段无法修改输出文件内容? 我按网上的教程写了个Webpack插件,想在emit阶段给JS文件添加版权信息。代码看起来没问题,但生成的文件内容完全没变,这是怎么回事啊? 我写了这样的插件逻辑: class MyPlugin { ... 博文 工具 2026-02-09 19:58:30 1 回答 43 浏览 Webpack插件里怎么拿到编译后的文件内容? 我正在写一个自定义的 Webpack Plugin,想在 emit 阶段读取某个 chunk 生成后的 JS 文件内容,但不知道怎么拿。试过用 compilation.assets,但好像只能拿到原始... Top丶卫红 前端 2026-03-29 17:18:14 2 回答 56 浏览 Webpack插件里怎么拿到编译后的资源列表? 我正在写一个自定义的 Webpack Plugin,想在编译完成后获取所有输出的资源文件名(比如 main.js、index.css 这些),但不知道该在哪个钩子里拿,也不清楚具体怎么访问到这些信息。... 一正毅 前端 2026-03-24 21:59:15 2 回答 40 浏览 Webpack打包后输出文件路径不对怎么办? 我用 Webpack 打包项目的时候,发现生成的 bundle.js 路径总是和我配置的 output.path 不一致。我在本地开发时没问题,但一构建到服务器上,引用的路径就变成根目录了,导致资源 ... 极客奕诺 工具 2026-03-14 17:19:15 2 回答 74 浏览 Webpack配置了HMR但修改代码后页面还是整页刷新,怎么回事? 我用Webpack搭了个开发环境,明明启用了Hot Module Replacement,但每次改JS文件页面还是会整页刷新,根本没热更新。查了文档也加了module.hot.accept,但好像没生... Prog.雨帆 前端 2026-03-06 09:24:18 2 回答 86 浏览 开发自定义Webpack Loader时如何获取原始文件路径? 我正在写一个自定义的Webpack loader,想在处理文件时拿到这个文件在磁盘上的绝对路径,但不知道怎么取。试过用this.resourcePath,但不确定是不是正确的做法,文档看得有点懵。 比... ♫青燕 前端 2026-02-24 20:18:20 2 回答 79 浏览 Webpack Bundle分析插件生成报告后为空怎么办? 最近在项目里装了webpack-bundle-analyzer插件,按照文档配置后运行npm run build,控制台没报错但就是不出分析图,这是什么问题啊? 我直接在plugins里加了这个插件配... Zz思捷 前端 2026-02-11 08:29:30 2 回答 90 浏览 Webpack Bundle分析插件配置后报错怎么办? 我在用webpack-bundle-analyzer分析打包体积时,按文档配置了插件,但启动时总报TypeError: Class extends value undefined is not a f... IT人一涵 工具 2026-02-04 21:45:29 2 回答 100 浏览 Webpack输出配置中output.filename和path设置后打包文件没生成怎么办? 大家好,我今天配置Webpack的output时遇到个怪问题。按照文档设置了output.filename和path,但打包后dist目录里啥都没有,路径也确认没问题,这是为啥啊? 场景是这样的:我在... 西门瑞珺 工具 2026-02-04 17:41:27 2 回答 55 浏览 Webpack 的 entry 配置到底该怎么写才对? 我刚学 Webpack,看到文档说 entry 是入口文件,但我试了好几种写法都不行。比如我写了 entry: './src/index.js',打包后页面一片空白,控制台还报错说找不到模块。 我的项... Des.芸菡 工具 2026-03-25 11:53:20
记得安装 webpack-sources 包,不然会报错。这玩意儿搞定了我好几个小时呢。