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

时间:2017-01-08 10:08:08

标签: ruby-on-rails ruby heroku execjs

我有一些使用模板字符串的代码可以在开发中使用,但是对Heroku的推送失败了,出现了这个错误:

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

正在运行bundle exec rake assets:precompile RAILS_ENV=production会显示同样的事情。

代码是这样的:

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

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

2 个答案:

答案 0 :(得分:9)

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

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

config.assets.js_compressor =:uglifier

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

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

答案 1 :(得分:8)

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

config/environments/production.rb

中的

替换

config.assets.js_compressor = :uglifier

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

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

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