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

我尝试使用 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() {}
}
});
...
}

我添加了上面的“ *”,以指示 JS _ Parse _ Error 列出的确切位置。

90556 次浏览

//更新

来自评论 ~ @ imolit

V2.0.0(2018-09-14)-突破性改变

切换回 丑八怪(丑化是废弃的,如果你需要丑化 ES6代码请使用 Terser-webpack-plugin)。


更新前的原始答案..。

我希望你能从这个解决方案中得到启发,它与 webpack 一起工作

只要教 UglifyJS ES6

UglifyJS-ES5ES6(Harmony)、 见鬼去吧有两个版本
ES5版本默认包含所有插件,但如果显式安装 Harmony 版本,这些插件将使用它。

包裹 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 插件

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

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

添加 babel-preset-es2015依赖项来解决这个问题。

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

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

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

主要问题是 Webpack 的软件包 json中的 "uglifyjs-webpack-plugin": "^0.4.6"

根据 永远^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没有这个问题

对我来说,它与 Uglify 不能正常工作没有任何关系,而是一个尚未编译到 ES5的依赖项(在本例中为空承诺)。由于我们刚刚导入了原始源文件,但是 babel 只是在 node _ module 之外传输文件,因此 uglify 被 ES6语法弄混了。

只需检查您最近添加的任何依赖项是否可能没有“ dist”构建。

我有同样的问题,我发现了一个伟大的答案 给你,帮助我达到的文件,是造成错误。

转到 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

希望能帮到别人!

在.babelrc 文件中将 stage-3添加到预置。

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

如果你使用 Grunt (Grunt-Contrib-uglify)得到了这个错误,解决方案是安装这个插件的 ES6版本:

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