Webpack 5配置TerserPlugin自定义压缩时require('uglify-module')找不到模块
报错根源
- 你照搬的配置片段是TerserPlugin官方文档中演示自定义minify函数用法的示例段,其中
uglify-module是文档用来指代任意第三方压缩工具的占位符,并非真实发布在npm仓库的可安装包,这就是触发Cannot find module 'uglify-module'报错的核心原因。 - npm registry检索不到同名包的结果,也刚好印证了这个模块本身就不存在,不是依赖安装异常导致的问题。
修复方案
无自定义压缩逻辑需求的常规场景
如果只是想正常用Terser做代码压缩,不需要自定义minify流程,可直接删掉配置里硬写的自定义minify方法,调整为原生TerserPlugin配置即可,参考配置:
optimization: { minimize: true, minimizer: [ new TerserPlugin({ terserOptions: { // 写入实际需要的压缩规则 compress: { drop_console: true, drop_debugger: true }, format: { comments: false } }, extractComments: true }) ] }
需要自定义压缩流程的场景
如果确实要替换成第三方压缩工具实现自定义压缩逻辑,需要先安装真实存在的对应依赖,再把示例里的占位模块替换为实际安装的包名。以接入uglify-js为例:
- 先执行安装命令:
npm install uglify-js --save-dev - 调整minify函数内的模块引用,替换后的完整配置参考:
const UglifyJS = require('uglify-js') // 其余webpack配置保持不变 optimization: { minimize: true, minimizer: [ new TerserPlugin({ minify: (file, sourceMap, minimizerOptions) => { const extractedComments = [] // 调用真实安装的uglify-js方法完成代码压缩 const compressResult = UglifyJS.minify(file, { sourceMap: !!sourceMap }) return { map: compressResult.map, code: compressResult.code, extractedComments } } }) ] }
内容的提问来源于stack exchange,提问作者Delowar Hosain
相关产品推荐
相关产品推荐

