現象
環境: 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で書かれていて、絶賛移行途中といった状況です。