不显示的编译错误的行号ExecJS咖啡脚本(Rails的资产管道)(ExecJS coffee sc

2019-09-01 22:48发布

在我的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 RuntimeerrorProgramError似乎并不重要-在第一个应用程序,有没有给一个行号,并在第二,总是有。

Answer 1:

我想通了-这是由于coffee-script-source宝石版本。 在被赋予行号的应用, bundle show给咖啡脚本代码的1.4.0,而其他应用程序有1.6.1咖啡脚本代码版本。

我没有注意到这一点,因为coffee-rails宝石不严格规定这种依赖性(在我的Gemfiles,我是用gem 'coffee-rails', '3.2' )。 为了解决这个问题,就明确指定咖啡脚本代码宝石版本

gem 'coffee-rails', '3.2.2'
gem 'coffee-script-source', '1.5.0'

bundle update coffee-script-source

希望这有助于别人谁可能会遇到这种差异。



Answer 2:

这也可以固定这个补丁嵌入在错误信息行信息的ruby-coffee-script宝石。

如果您使用源地图, 这个补丁修复了coffee-rails-source-maps宝石。



文章来源: ExecJS coffee script not showing line numbers for compile errors (Rails asset pipeline)