我正在尝试使用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列出的确切位置。
答案 0 :(得分:51)
v2.0.0(2018-09-14) - 突然变化(link)
切换回uglify-js(如果您需要使用uglify ES6代码,请放弃uglify-es,请使用terser-webpack-plugin)。
<小时/>
我希望你能从这个与webpack一起使用的解决方案中获得灵感。 (以下链接)
有两个版本的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插件
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
还不够
"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。