生产环境构建报错:UglifyJs抛出TypeError: name.definition is not a function
解决UglifyJs构建时的TypeError: "name.definition is not a function"错误
可能原因及对应解决方案
1. UglifyJS不支持ES6+语法
旧版uglifyjs-webpack-plugin依赖的UglifyJS仅能处理ES5代码,若项目中存在未转译的ES6+语法(如类、可选链、箭头函数等),会触发解析错误。
- 处理方式:
替换为官方推荐的terser-webpack-plugin(支持ES6+压缩,兼容webpack4+):
若坚持使用UglifyJS,需确保所有代码(包括第三方依赖)都通过Babel转译为ES5。const TerserPlugin = require('terser-webpack-plugin'); // 修改minimizer配置 minimizer: [ new TerserPlugin({ terserOptions: { compress: { warnings: false } }, sourceMap: config.build.productionSourceMap, parallel: true }) ]
2. 第三方依赖存在未转译的ES6+代码
部分依赖包发布的是ES6+源码,webpack默认不转译node_modules内的文件,导致UglifyJS解析失败。
- 处理方式:
修改webpack的module.rules,让babel-loader处理指定依赖:module: { rules: [ { test: /\.js$/, loader: 'babel-loader', include: [ path.resolve(__dirname, 'src'), // 添加需要转译的依赖包路径,例如: // path.resolve(__dirname, 'node_modules/your-problem-package') ] } ] }
3. 版本兼容性问题
旧版uglifyjs-webpack-plugin与当前webpack版本不匹配,会引发解析逻辑冲突。
- 处理方式:
升级uglifyjs-webpack-plugin到对应webpack版本的兼容版,或直接替换为terser-webpack-plugin。
4. 源码存在语法/逻辑错误
报错指向name.definition,可能是源码中name对象未正确初始化,或definition并非可调用函数。
- 处理方式:
先注释掉UglifyJSPlugin关闭压缩,构建后找到对应未压缩文件,定位name.definition相关代码,检查变量声明、函数赋值是否正确。
内容的提问来源于stack exchange,提问作者Justin Rushin
相关产品推荐
相关产品推荐

