【问题标题】:Rails 5 don't precompile JS files with ES6 code in productionRails 5 不会在生产环境中使用 ES6 代码预编译 JS 文件
【发布时间】:2017-10-25 17:12:45
【问题描述】:

我正在使用一些包含 ES6 代码的 javascript 部署一个应用程序。

当我运行bundle exec rake assets:precompile RAILS_ENV=production 时,我得到:

ExecJS::RuntimeError: SyntaxError: Unexpected token: punc ())

这是因为prueba.js有以下内容:

var greetings = () => {
  let saludo = 'tio';
  console.log('saludo' + saludo)
};
greetings();

而且 Uglify 无法识别 ES6。为了解决这个问题,我已经安装并设置了 gem:

gem 'sprockets-es6', '~> 0.9.2'
gem 'babel-transpiler', '~> 0.7.0'

但是没有用,

在 application.rb 中,我有:

require "action_view/railtie"
require "sprockets/railtie"
# require "rails/test_unit/railtie"
require 'sprockets/es6'

注意:如果我在没有 RAILS_ENV=production 的情况下运行 rake assets:precompile,我不会收到错误

【问题讨论】:

  • 我认为你需要将.es6添加到Sprockets的文件扩展名中才能通过babel运行JS。
  • @max 我更改为 .es6 扩展名,但出现其他错误:ExecJS::RuntimeError: SyntaxError: 'return' outside of function

标签: ruby-on-rails ecmascript-6 uglifier


【解决方案1】:

使用 ES6 时,如果使用 uglifier (3.2.0) 您可以更改文件 production.rb

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

【讨论】:

  • 它成功了!,只需更新 de Uglifier 版本,谢谢@adcosta
  • 显然 3.2.0 以上的版本仍然显示相同的错误,即使上面提到了更改。必须降级到 3.2.0 才能解决这个问题。
【解决方案2】:

接受的答案一直有效,但在几天前进行捆绑更新后发布新版本 execjs 2.8 后,使用 ES6 和 uglifier 压缩进行预编译停止工作。

错误:JSON::ParserError: 439: '{"code":"/*! ...

要让它再次工作,只需将 execjs 的版本修复为 2.7

【讨论】:

  • 我刚刚升级到 rails 5.1,解决我的问题是将 execjs 升级到 2.8.1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 2012-02-28
相关资源
最近更新 更多