一些ES6特性在Grunt Uglify JS中不能被理解?

22

我在我的项目中使用了grunt-uglify,并且正在使用es6。对于一些es6特性,比如fat arrow function,它会抛出一个错误。我认为uglify无法理解这种语法。那么,我有办法解决这个问题吗?也就是说,我可以使用什么东西来让uglify理解所有的es6语法?

5个回答

23

你可以使用 grunt-contrib-uglifyharmony 分支。

npm install git://github.com/gruntjs/grunt-contrib-uglify.git#harmony --save-dev

与es6完美配合。不需要额外的grunt设置。


4
这是唯一对我起作用的方法,但只有在将这行JavaScript代码 grunt.loadNpmTasks('grunt-contrib-uglify-es'); 添加到Gruntfile中后才能生效。这在官方GitHub页面中已经说明了。 - Harshith Rai
grunt-contrib-uglify.git#harmony现已过时。 - migli

18

目前还没有官方的ES6压缩工具(其他工具如Google Closure编译器支持ES6,但会将其转换为“传统js”然后进行压缩)。

尽管UglifyJs并不支持所有ES6功能,但UglifyJS2的Harmony分支似乎支持箭头函数和其他功能。

你可以在这里阅读有关该问题的讨论。看起来除了等待(或创建自己的ES6压缩器)外,没有其他选择。

更新

现在您有两个选项可以压缩ES6:


4
有关那个的任何消息吗? - NeoPix
3
咚!现在是2019年了... 仍然面临着uglify无法接受“let”的问题。 - Dropout
2021年现在,它已经部分实现。目前还不支持.?运算符,但我还没有发现其他问题... - Esteban
生成器函数的*似乎还没有被理解。 - aderchox

4
现在提供了一个针对ES6+的Grunt插件,包括解析器、混淆/压缩和美化工具箱:https://github.com/adascal/grunt-terser。非常出色,它按预期工作。 grunt-contrib-uglifyharmony分支已被弃用,这不是一个可持续的解决方案。

2
如果生成的代码不需要使用ES6语法,那么在混淆代码之前,也可以将ES6转换为ES5。例如,可以使用Grunt任务grunt-es6-transpiler来完成这个操作。

1
我刚刚更新到uglify-js@2.8.29,它可以正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接