She*_* Yu 11 ruby-on-rails coffeescript execjs asset-pipeline
在我的一个Rails应用程序中,ExecJS没有显示coffeescript编译错误的行号.我的编译错误消息将如下所示:
ExecJS::RuntimeError in Referrals#new
Showing ~/MyApp/app/views/layouts/application.html.erb where line #6 raised:
SyntaxError: unexpected IDENTIFIER
(in ~/MyApp/assets/javascripts/utils.js.coffee)
Run Code Online (Sandbox Code Playgroud)
请注意,咖啡脚本源没有行号(第6行用于erb文件).
在我的另一个应用程序中,我仍然在获取行号,语法错误如下所示:
ExecJS::ProgramError in Projects#show
Showing ~/OtherApp/app/views/layouts/application.html.erb where line #17 raised:
Error: Parse error on line 6: Unexpected 'STRING'
(in ~/OtherApp/app/assets/javascripts/projects.js.coffee)
Run Code Online (Sandbox Code Playgroud)
所以看起来不同的是,它ExecJS::ProgramError会给出行号,而ExecJS::RuntimeError不是.
任何人都知道如何获得行号?为什么我的应用程序在咖啡资产编译时创建RuntimeErrors,而另一个是给出ProgramErrors?我检查过Rails,它们似乎匹配.
请注意,如果我修复编译错误,应用程序运行正常(例如,咖啡文件实际上已经编译) - 但是让这些行号指向编译错误会很好!
编辑
我意识到无论是ExecJS Runtimeerror还是ProgramError似乎并不重要 - 在第一个应用程序中,从来没有给出行号,而在第二个应用程序中,总是有.
She*_* Yu 18
我想通了 - 这是由于coffee-script-source宝石版本.在给出行号的应用程序中,bundle show给出了1.4.0的coffee-script-source,而另一个应用程序的咖啡脚本源版本为1.6.1.
我没有注意到这一点,因为coffee-railsgem没有严格指定这种依赖关系(在我使用的Gemfiles中gem 'coffee-rails', '3.2').要解决这个问题,只需明确指定coffee-script-source gem版本:
gem 'coffee-rails', '3.2.2'
gem 'coffee-script-source', '1.5.0'
Run Code Online (Sandbox Code Playgroud)
和bundle update coffee-script-source.
希望这可以帮助任何可能遇到这种差异的人.
| 归档时间: |
|
| 查看次数: |
3401 次 |
| 最近记录: |