ExecJS咖啡脚本没有显示编译错误的行号(Rails资产管道)
在我的一个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)
请注意,咖啡脚本源没有行号(第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)
所以似乎区别在于ExecJS::ProgramError
会给我行号,而ExecJS::RuntimeError
则不行。
任何人都知道如何获得行号? 为什么我的应用程序在咖啡资产编译上创建RuntimeErrors,而另一个是给出ProgramErrors? 我检查过Rails,它们似乎匹配。
请注意,如果我修复编译错误,应用程序运行正常(例如,咖啡文件实际上已经编译) – 但是让这些行号指向编译错误是很好的!
编辑我意识到,无论是ExecJS Runtimeerror
还是ProgramError似乎并不重要 – 在第一个应用程序中,从来没有给Runtimeerror
号,而在第二个应用程序中,始终存在。
我想通了 – 这是由于coffee-script-source
gem版本。 在给出行号的应用程序中, bundle show
给出了1.4.0的coffee-script-source,而另一个应用程序有一个1.6.1的coffee-script-source版本。
我没有注意到这一点,因为coffee-rails
gem没有严格指定这种依赖性(在我的Gemfiles中,我使用的是gem’coffee gem 'coffee-rails', '3.2'
)。 要解决这个问题,只需明确指定coffee-script-source gem版本 :
gem 'coffee-rails', '3.2.2' gem 'coffee-script-source', '1.5.0'
和bundle update coffee-script-source
。
希望这可以帮助任何可能遇到这种差异的人。
这也可以通过此修补程序修复, 该修补程序将行信息嵌入到ruby-coffee-script
gem 的错误消息中。
如果你正在使用源地图, 这个补丁修复了coffee-rails-source-maps
gem。