Rails 5不会在生产中使用ES6代码预编译JS文件

时间:2017-10-25 17:12:46

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

我正在使用包含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 '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 =生产的情况下运行rake assets:precompile,我就不会收到错误

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

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