【发布时间】:2016-11-20 15:20:00
【问题描述】:
我在我的项目中使用了 grunt-uglify,我正在使用 es6。对于某些 es6 功能,例如胖箭头函数,它会引发错误。我认为 uglify 不理解这种语法。所以我有办法解决这个问题。我的意思是我可以使用任何东西让 uglify 理解所有 es6 语法吗?
【问题讨论】:
标签: javascript gruntjs ecmascript-6 grunt-contrib-uglify
我在我的项目中使用了 grunt-uglify,我正在使用 es6。对于某些 es6 功能,例如胖箭头函数,它会引发错误。我认为 uglify 不理解这种语法。所以我有办法解决这个问题。我的意思是我可以使用任何东西让 uglify 理解所有 es6 语法吗?
【问题讨论】:
标签: javascript gruntjs ecmascript-6 grunt-contrib-uglify
官方还没有缩小 ES6 的工具(Google Closure 编译器等其他工具支持 ES6,但它会将其转换为“传统 js”,然后将其缩小)。
虽然 UglifyJs 并不支持所有的 es6 功能,但the Harmony branch of UglifyJS2 似乎支持箭头功能和其他功能。
You can read the discussion about it in the issue of github here。似乎没有其他选择可以等待(或创建自己的 ES6 缩小器)。
更新
现在你有 2 个选项来缩小 ES6:
【讨论】:
如果生成的代码不需要使用 ES6 语法,也可以在丑化代码之前将 ES6 转换为 ES5。例如,这可以通过 Grunt 任务 grunt-es6-transpiler 来完成。
【讨论】:
您可以使用grunt-contrib-uglify 的harmony 分支。
npm install git://github.com/gruntjs/grunt-contrib-uglify.git#harmony --save-dev
与 es6 完美配合。不需要对 grunt 进行额外设置。
【讨论】:
grunt.loadNpmTasks('grunt-contrib-uglify-es'); 这个 javascript 行之后才有效,如 official GitHub page 中所述。
我刚刚更新到 uglify-js@2.8.29 并且成功了。
【讨论】:
现在可以使用 用于 ES6+ 的 Grunt 插件 ES6 解析器、mangler/compressor 和美化工具包:
https://github.com/adascal/grunt-terser
干得好,按预期工作。
grunt-contrib-uglify 的 harmony 分支已弃用,它不是一个可持续的解决方案。
【讨论】: