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

6
我有一些使用模板字符串的代码,在开发中可以运行,但是在推送到 Heroku 时会出现以下错误:
 ExecJS::RuntimeError: SyntaxError: Unexpected character '`'

运行 bundle exec rake assets:precompile RAILS_ENV=production 显示的内容是相同的。

代码如下:

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

我想知道Heroku Node的版本是否太低以至于无法支持这个。我没有进行任何自定义操作,只是使用默认配置推送了一个Rails 4应用程序。


你在使用转译器吗?比如说babel? - theBrezilien
@theBrezilien 不需要,这只是js.erb模板。我不知道为什么需要Babel,因为主流浏览器已经支持模板字符串了。 - max pleaner
2个回答

11

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

在那里,我发现了建议注释掉以下这行代码:

config.assets.js_compressor = :uglifier

问题是'uglifier'(压缩器)并不能正确处理ES6语法。

正如帖子所提到的,使用此修复方法意味着脚本将不再被压缩,所以如果有更好的解决方案,我仍然很感兴趣。


我靠,老兄,我爱死你了!我整天都在努力解决这个问题。你救了我 :) 非常感谢你。 - denyzprahy

10

现在的 Uglifier 已经具备了实验性的 ES6 支持,但需要先进行配置:

config/environments/production.rb 中:

config.assets.js_compressor = :uglifier

替换为

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


然而,ES6 的测试并不充分。处理 ES6 代码的更稳定的选择是先用 babel-transpiler 等工具将其转换为 ES5,或者使用 Closure Compiler 直接压缩 ES6 代码。

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


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