UglifyJS webpack插件抛出:意外的令牌:名称(功能)

ale*_*lex 4 javascript uglifyjs ecmascript-6 uglifyjs2 webpack

我曾经遇到过UglifyJS for Webpack和ES6模块的问题:

来自UglifyJs的static/js/vendor.6ccd9e38979a78765c7a.js中的错误Unexpected token:name(features)[./ node_modules/pica/lib/mathlib.js:19,0] [static/js/vendor.6ccd9e38979a78765c7a.js:39003, 6]

我读到Webpack插件的新测试版支持ES6:

https://github.com/webpack-contrib/uglifyjs-webpack-plugin

new webpack.optimize.UglifyJsPlugin({
  uglifyOptions: {
    ie8: false,
    ecma: 8, // I also tried 7 and 6
    parse: {},
    mangle: {
      properties: {
        // mangle property options
      }
    },
    output: {
      comments: false,
      beautify: false
    },
    compress: {},
    warnings: true
  }
}),
Run Code Online (Sandbox Code Playgroud)

但是,现在我又收到了另一个错误:

来自UglifyJs的static/js/vendor.6ccd9e38979a78765c7a.js中的错误Unexpected token:name(features)[static/js/vendor.6ccd9e38979a78765c7a.js:39003,6]

可能是什么问题呢?

Dar*_*ski 8

您可以尝试安装babel-preset-env并添加presets": [ "env" ]到webpack.config.js或babelrc.

Uglify无法自行解析ES6(据我所知),因此您需要将代码转换为ES5,使用babel对生成的JS进行后处理,或使用其他缩小器.我的推荐是Babelify,我在与Uglify一起出现错误后切换到了Babelify.

编辑:问题可能在您的new webpack.optimize.UglifyJsPlugin声明中,使用Webpack 3+的此声明存在问题.您需要将uglifyjs-webpack-plugin插件声明导入并更改为new UglifyJSPlugin(示例).这是一个参考.

例:

const UglifyJSPlugin = require('uglifyjs-webpack-plugin')

    const config = {
      ...
      plugins: [
        new UglifyJSPlugin({ uglifyOptions: { ...options } })
      ]
    }
Run Code Online (Sandbox Code Playgroud)