Uglify SyntaxError:意外的令牌:punc())

Ale*_*der 55 javascript gulp gulp-uglify

我试图使用gulp来缩小包含JS文件的文件夹.但是,其中一个文件存在上述错误,导致其无法缩小.

我设法抓住并打印了错误,我在这里部分打印过:

JS_Parse_Error {
 message: 'SyntaxError: Unexpected token: punc ())',
 filename: 'ex.js',
 line: 189,
 col: 25,
 pos: 6482,
 stack: Error\n    at new JS_Parse_Error (eval at <anonymous> ... ) 
 plugin: 'gulp-uglify',
 fileName: '.../js/ex.js',
 showStack: false
}
Run Code Online (Sandbox Code Playgroud)

有问题的文件包含以下内容,缩写为:

function() {
  ...
  $.confirm({
    buttons: {
        confirm: function() {
            $.post('/ajax-handler', {
                    ...
                })
                .done( function(response) {
                    var data = filterResponse(response);
                    if (data['status'] == 'success') {
                        sleep(1000).then(() => {
                    *       ...
                        });
                        sleep(5000).then(() => {
                            ...  
                        });

                    } else {
                        console.log('Oops!');
                    }
                })
                .fail( function(err, status, response) {
                    ...
            });
        },
        cancel: function() {}
    }
 });
  ...
}
Run Code Online (Sandbox Code Playgroud)

我在上面添加了"*"以指示JS_Parse_Error列出的确切位置.

Qwe*_*rty 55

//更新

来自评论〜@ imolit

 v2.0.0(2018-09-14) - 突然变化(链接)

切换回uglify-js(uglify-es被放弃,如果你需要uglify ES6代码,请使用terser-webpack-plugin).


更新前的原始答案......

我希望你能从这个与webpack一起使用的解决方案中获得灵感.(下方链接)

只需教授UglifyJS ES6

有两个版本的UglifyJS - ES5ES6(Harmony),参见git
ES5版本默认包含所有插件,但如果你明确安装了Harmony版本,那些插件将使用它.

的package.json

"uglify-js": "git+https://github.com/mishoo/UglifyJS2.git#harmony"
Run Code Online (Sandbox Code Playgroud)

要么

npm install --save uglify-js@github:mishoo/UglifyJS2#harmony

yarn add git://github.com/mishoo/UglifyJS2#harmony --dev
Run Code Online (Sandbox Code Playgroud)

的WebPack

要与webpack一起使用,也要安装webpack插件

npm install uglifyjs-webpack-plugin --save-dev

yarn add uglifyjs-webpack-plugin --dev
Run Code Online (Sandbox Code Playgroud)

然后导入手动安装的插件

var UglifyJSPlugin = require('uglifyjs-webpack-plugin');
Run Code Online (Sandbox Code Playgroud)

并在代码中替换它

-  new webpack.optimize.UglifyJsPlugin({ ... })
+  new UglifyJSPlugin({ ... })
Run Code Online (Sandbox Code Playgroud)

有关更多webpack信息(安装/使用),请参阅https://github.com/webpack-contrib/uglifyjs-webpack-plugin#install

  • 简而言之,这个解决方案不能正常工作,因为uglifyjs-webpack-plugin的后续版本与uglifyjs2#harmony分支不兼容.对于uglify-webpack-plugin,我不得不使用v0.4.4.对于uglify-js,我使用了git://github.com/mishoo/UglifyJS2#harmony-v2.8.22.希望能帮到别人 (4认同)
  • 仅供参考,这是在uglifyjs-webpack-plugin的测试版中修复的.在你的package.json中使用`"uglifyjs-webpack-plugin":"^ 1.0.0-beta.2"`让它再次使用上面的修复程序. (4认同)
  • 在这种情况下,`--save-dev`不会更合适吗? (4认同)
  • 注意:Webpack 部分已过时。`uglifyjs-webpack-plugin` [不再支持 ES6](https://github.com/webpack-contrib/uglifyjs-webpack-plugin/blob/master/CHANGELOG.md#200-2018-09-14) 和他们推荐 [terser-webpack-plugin](https://github.com/webpack-contrib/terser-webpack-plugin) 代替。 (2认同)

WOW*_*WOW 17

npm install uglifyjs-webpack-plugin --save-dev 是不足够的

主要的问题是"uglifyjs-webpack-plugin": "^0.4.6"的WebPack的的package.json

semver,^0.4.6 := >=0.4.6 <0.5.0.由于领先零,webpack永远不会使用1.0.0-beta.2.

所以在运行之后npm i -D uglifyjs-webpack-plugin@beta,你需要再做一步rm -rf node_modules/webpack/node_modules/uglifyjs-webpack-plugin.然后webpack将从而node_modules/uglifyjs-webpack-plugin取代该版本node_modules/webpack/node_modules/uglifyjs-webpack-plugin

2018-04-18更新:webpack v4没有此问题

  • 我正在使用webpack v4.12.0,这是必要的 (2认同)

Qin*_*ing 8

添加babel-preset-es2015依赖项以解决此问题.

还可以添加'es2015'.babelrc文件中.

json
{
    "presets": ["es2015"]
}
Run Code Online (Sandbox Code Playgroud)


ami*_*zer 6

如果您使用 Grunt (grunt-contrib-uglify) 遇到此错误,解决方案是安装 ES6 版本的插件:

npm install grunt-contrib-uglify-es --save-dev
Run Code Online (Sandbox Code Playgroud)


Ham*_*han 5

我遇到了同样的问题,我在这里找到了一个不错的答案 可以帮助我找到导致错误的文件。

转到Rails Console并粘贴:

JS_PATH = "app/assets/javascripts/**/*.js";
Dir[JS_PATH].each do |file_name|
  puts "\n#{file_name}"
  puts Uglifier.compile(File.read(file_name))
end
Run Code Online (Sandbox Code Playgroud)

希望它能对某人有所帮助!