Rails6部署后出现SyntaxError及$未定义问题求助
问题诊断与原因分析
问题背景
此前应用运行正常,通过Capistrano部署后出现异常:开发者工具报错,点击任意标签页均无法正常工作。
报错详情
Uncaught SyntaxError: Unexpected token 'export' (at application-00b7157c7.js:44883:1) (index):261 Uncaught ReferenceError: $ is not defined at (index):261:1 (anonymous) @ (index):261 (index):268 Uncaught ReferenceError: $ is not defined at (index):268:5 (anonymous) @ (index):268 (index):285 Uncaught ReferenceError: $ is not defined at (index):285:5
报错触发代码
$.ajaxSetup({ headers: { 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') } });
当前环境信息
- ExtJS版本:
4.2.1.883 application.js依赖配置:
// //= require jquery //= require jquery_ujs //= require js/bootstrap.min //= require js/ekko-lightbox.min //= require jquery.placeholder //= require jquery-ui
核心原因
export语法错误是触发所有问题的根源:
浏览器无法识别ES6的export关键字,导致application-00b7157c7.js脚本加载中断,后续的jQuery等依赖代码完全没有执行,因此才会出现一系列$ is not defined的报错。部署后出现问题的具体诱因:
- 最近代码新增/更新的JS文件中,使用了ES6模块语法(
export/import),但项目的资产打包工具(如Sprockets)未配置Babel等转译工具,无法将ES6代码转为兼容旧环境的语法。而ExtJS 4.2属于老版本,运行环境本身不支持ES6模块。 - Capistrano部署时的资产编译(
rake assets:precompile)过程出现异常,某个未被转译的文件被直接打包进最终的application.js,导致语法错误。
- 最近代码新增/更新的JS文件中,使用了ES6模块语法(
验证方向:
- 排查近期代码提交,确认是否有新增含ES6模块语法的JS文件。
- 查看Capistrano部署日志,检查
assets:precompile步骤是否有警告或错误。 - 对比本地开发环境与生产环境的
application.js内容,确认生产环境是否混入未转译的ES6代码。
内容的提问来源于stack exchange,提问作者KavitaC
相关产品推荐
相关产品推荐

