You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生产环境构建报错: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+):
    const TerserPlugin = require('terser-webpack-plugin');
    // 修改minimizer配置
    minimizer: [
      new TerserPlugin({
        terserOptions: {
          compress: {
            warnings: false
          }
        },
        sourceMap: config.build.productionSourceMap,
        parallel: true
      })
    ]
    
    若坚持使用UglifyJS,需确保所有代码(包括第三方依赖)都通过Babel转译为ES5。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:16:05