RAILS_ENV=production bundle exec rails assets:precompile
会出错。
花了我大概 20 分钟才定位到原来不是代码错了,只是因为
<%= javascript_include_tag 'application_v2', 'data-turbolinks-track': 'reload' %>
里面有写中文注释。。。
几种方案:
就是想问问大家一般都选什么方案解决?
我要结束这个帖子了,因为刚刚测试发现 asset pipeline 里有中文又不会报错了。
很奇怪,我记得上次调试的时候明明就是因为中文注释导致的,然后刚刚再去折腾一次又没问题了,反正蛮懵逼的。
我又打开讨论了,发现问题是
RAILS_ENV=production bundle exec rails assets:precompile
会有问题。
而楼上刚刚讨论的,平时普通开发的时候,或者跑
bundle exec rails assets:precompile
都不会有问题,只是生产环境编译的时候就会有问题。
RAILS_ENV=production bundle exec rails assets:precompile
会出错。
尝试过这个方法:
(在 rails console 里一个个编译,然后看是哪个文件的问题)
https://stackoverflow.com/questions/30422437/execjsprogramerror-unexpected-token-punc-expected-punc-when-running
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
定位到了是哪个文件,但没说问题是哪一行,所以还是无法解决。
https://github.com/browserify-rails/browserify-rails/issues/137#issuecomment-179461412
这个是注释掉 config/environments/production.rb
里的 config.assets.js_compressor = :uglifier
当然这个会导致代码没有压缩,保持原样
最后没有用 2 的方式解决,
没有去注释掉 config/environments/production.rb
里的 config.assets.js_compressor = :uglifier
看了下是 uglifier 不支持 ES6(当前时间 2017 年 11 月 15 日)
uglifier ES6 相关讨论只看到这一条:https://github.com/lautis/uglifier/issues/116
最后发现问题是
setTimeout(() => {
jQuery('#app').addClass('event_open');
}, 1000);
我没注意这里 ES6 的语法
改成了:
setTimeout(function(){
jQuery('#app').addClass('event_open');
}, 1000);
问题解决!