生产环境执行rake assets:precompile时ES6语法致资产管道失败
解决Rails生产环境资产预编译的ES6语法错误
你遇到的Uglifier::Error: Unexpected token: punc (()错误,核心原因是生产环境下Uglifier默认不支持ES6语法,而开发环境要么未开启JS压缩,要么配置了宽松的处理逻辑,所以不会触发该问题。
修复步骤:
- 启用Uglifier的Harmony模式
打开config/environments/production.rb,找到或添加JS压缩器配置,修改为:
config.assets.js_compressor = Uglifier.new(harmony: true)
Harmony模式会让Uglifier支持ES6及以上的语法特性。
- 确保Uglifier版本兼容
检查Gemfile中的uglifier版本,建议使用支持Harmony模式的4.1.0及以上版本,示例配置:
gem 'uglifier', '>= 4.1.0'
执行bundle install更新依赖。
- 重新预编译资产
运行以下命令验证修复效果:
rake assets:precompile RAILS_ENV=production
如果你的项目已迁移到Webpacker(Rails 5.1+默认支持),也可以考虑用Webpack处理ES6代码——这是更现代的前端资产管理方案,但上述方法足以解决传统资产管道下的ES6兼容问题。
内容的提问来源于stack exchange,提问作者alectrico
相关产品推荐
相关产品推荐

