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

max*_*ner 4 ruby ruby-on-rails heroku execjs

我有一些代码使用模板字符串在开发中工作,但推送到Heroku失败了这个错误:

 ExecJS::RuntimeError: SyntaxError: Unexpected character '`'
Run Code Online (Sandbox Code Playgroud)

跑步bundle exec rake assets:precompile RAILS_ENV=production显示同样的事情.

代码是这样的:

`1 + 1 is ${1 + 1}`
Run Code Online (Sandbox Code Playgroud)

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

max*_*ner 9

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

在哪里我找到了评论该行的建议:

config.assets.js_compressor =:uglifier

问题是'uglifier'(缩小器)与ES6语法无法正常工作.

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


Der*_*Fan 9

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

config/environments/production.rb

更换

config.assets.js_compressor = :uglifier

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


但是,ES6没有经过广泛测试.使用ES6代码的更稳定的替代方案是首先使用例如babel-transpiler或使用Closure Compiler直接缩小到ES5代码.

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