使用 ES6 时无法预编译生产资产

Can't precompile production assets when using ES6

我有一些使用模板字符串的代码在开发中有效,但推送到 Heroku 失败并出现此错误:

 ExecJS::RuntimeError: SyntaxError: Unexpected character '`'

运行 bundle exec rake assets:precompile RAILS_ENV=production 显示相同的东西。

代码是这样的:

`1 + 1 is ${1 + 1}`

不知是不是Heroku Node版本太低不支持。我根本没有定制这个。只需使用默认配置推送 Rails 4 应用程序。

我最终找到了这个帖子:https://github.com/browserify-rails/browserify-rails/issues/137

我在哪里找到注释掉该行的建议:

config.assets.js_compressor = :丑化者

问题是 'uglifier'(缩小器)无法正确使用 ES6 语法。

正如线程提到的那样,使用此修复意味着脚本将不再被缩小,所以我仍然很好奇是否有更好的解决方案。

Uglifier 现在有实验性的 ES6 支持,但您必须先配置它:

config/environments/production.rb

替换

config.assets.js_compressor = :uglifier

config.assets.js_compressor = Uglifier.new(harmony: true)


然而,ES6 并未经过广泛测试。使用 ES6 代码的更稳定的替代方法是首先使用例如 transpile 到 ES5 babel-transpiler 或使用 Closure Compiler 直接压缩 ES6 代码。

文档:https://github.com/lautis/uglifier#user-content-es6--es2015--harmony-mode