使用 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
我有一些使用模板字符串的代码在开发中有效,但推送到 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