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

时间:2017-02-21 18:44:26

标签: 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
}

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

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() {}
    }
 });
  ...
}

我添加了&#34; *&#34;上面是为了表明JS_Parse_Error列出的确切位置。

8 个答案:

答案 0 :(得分:51)

//更新

From the comments ~ @imolit

  

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

     

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

<小时/>

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

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

简单教授UglifyJS ES6

有两个版本的UglifyJS - ES5 ES6 (和谐),see on git
ES5版本默认包含所有插件,但如果您明确安装Harmony版本,那些插件将使用它。

的package.json

"uglify-js": "git+https://github.com/mishoo/UglifyJS2.git#harmony"

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

yarn add git://github.com/mishoo/UglifyJS2#harmony --dev

的WebPack

要与webpack一起使用,还要使用webpack插件

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

yarn add uglifyjs-webpack-plugin --dev

然后导入手动安装的插件

var UglifyJSPlugin = require('uglifyjs-webpack-plugin');

并将其替换为代码

-  new webpack.optimize.UglifyJsPlugin({ ... })
+  new UglifyJSPlugin({ ... })

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

答案 1 :(得分:18)

npm install uglifyjs-webpack-plugin --save-dev还不够

主要问题是webpack's package.json

中的"uglifyjs-webpack-plugin": "^0.4.6"

根据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没有此问题

答案 2 :(得分:8)

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

并在'es2015'文件中添加.babelrc

json
{
    "presets": ["es2015"]
}

答案 3 :(得分:4)

我遇到了同样的问题,我找到了一个很棒的答案here,帮助我找到导致错误的文件。

转到Rails控制台并粘贴:

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

希望它有所帮助!

答案 4 :(得分:2)

对我而言,它与Uglify无法正常工作无关,而是与尚未编译为ES5的依赖(在本例中为空承诺)。由于我们刚刚导入了原始源文件,但是babel只是在node_modules之外转换文件,因此uglify对ES6语法感到困惑。

只需检查您最近添加的依赖项是否可能没有&#34; dist&#34;建立。

答案 5 :(得分:1)

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

npm install grunt-contrib-uglify-es --save-dev

答案 6 :(得分:0)

将Stage-3添加到.babelrc文件中的预设中。

{
  "presets": [
    "stage-3"
  ]
}

答案 7 :(得分:0)

我对你也有同样的问题。我正在使用gulp.js。我解决了这个问题,这要归功于js文件更改了ES格式。例如,在解决之前是我的代码:

for (district for response) {
                $('#districts').append('<option value="' + district.id + '">' + district.name + '</option>');
                $('#districts').removeAttr('disabled');
            }

修正代码后:

for (district in response) {
                $('#districts').append('<option value="' + district.id + '">' + district.name + '</option>');
                $('#districts').removeAttr('disabled');
            }

总而言之,问题出在Ecma-uglify.js。