【问题标题】:Can't precompile production assets when using ES6使用 ES6 时无法预编译生产资产
【发布时间】:2017-01-08 10:08:07
【问题描述】:

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

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

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

代码是这样的:

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

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

【问题讨论】:

  • 你在使用转译器吗?像通天塔?
  • @theBrezilien 不,它只是 js.erb 模板。我不知道为什么需要 Babel,因为主流浏览器无论如何都支持模板字符串

标签: ruby-on-rails ruby heroku execjs


【解决方案1】:

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

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

config.assets.js_compressor = :uglifier

问题在于“uglifier”(缩小器)无法正确使用 ES6 语法。

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

【讨论】:

  • 天哪,我爱你!我花了一天的时间试图解决这个问题。你救了我:) 非常感谢。
【解决方案2】:

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

config/environments/production.rb

替换

config.assets.js_compressor = :uglifier

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


但是,ES6 没有经过广泛的测试。使用 ES6 代码的更稳定的替代方法是首先转换为 ES5,例如babel-transpiler 或使用 Closure Compiler 直接压缩 ES6 代码。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-07
    • 2019-12-08
    • 1970-01-01
    • 2016-10-14
    • 2013-05-08
    • 2012-03-26
    • 1970-01-01
    相关资源
    最近更新 更多