LoginSignup
25
20

More than 5 years have passed since last update.

[Rails] Assets Precompile時にExecJS::ProgramError: Unexpected token operator «=», expected punc «,» というエラーで失敗する

Last updated at Posted at 2017-01-31

現象

環境: Amazon Linux AMI 2015.09 release node
Asset Precompile時に以下のエラーがでてこける。

ExecJS::ProgramError: Unexpected token operator «=», expected punc «,» (line: 46689, col: 76, pos: 1683118)

エラー発生行数が出ているので簡単かと思いきや、これは結合途中のもので全くあてにならないため、一筋縄では見つからず雲中模索していた。

解決方法

rails consoleでuglifyを直接実行することで、ファイルを特定することができた。

bundle exec rails c -e production
JS_PATH = "app/assets/javascripts/**/*.js"; 
Dir[JS_PATH].each do |file_name|
  puts "\n#{file_name}"
  puts Uglifier.compile(File.read(file_name))
end

これを実行すると、今度はファイル名とその後にファイル単体でのエラー行数が表示される。

app/assets/javascripts/path/to/hoge.js
ExecJS::ProgramError: Unexpected token operator «=», expected punc «,» (line: 131, col: 76, pos: 3564)

ちなみに原因は以下のように、es5で対応していない関数のデフォルト値入力でエラーになっていた。
chromeだとエラーが起こらないのと、precompileもenv=developmentだと普通に通ってしまうようなので厄介。

function hoge(a, b = 0) {
...
}

事前対策

検討中
なにかいい方法があれば教えてくださいm(__)m

Webサービスを1年ほど運用中で、
JSに関しては最近 Shopify/sprockets-commoner を使ってes6の導入を始めたんですが、既存部分の多くはes5で書かれていて、絶賛移行途中といった状況です。

25
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
20