ExecJS编译CoffeeScript时没有显示行号的错误信息(Rails资产管道)

12
在我的Rails应用程序中,ExecJS没有显示Coffeescript编译错误的行号。我的编译错误消息将如下所示:

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


我使用的是1.6.2版本,遇到了这个问题。 - Narfanator
@Narfanator,你看到我的回答了吗? - Sherwin Yu
是的,我花了一分钟;我也把我的设置为1.5.0,现在没问题了。我很惊讶那个功能消失了,这可是开发中非常重要的核心功能。 - Narfanator
2个回答

18

我找到了原因——是由于coffee-script-source gem 版本的问题。在那个显示行号的应用程序中,bundle show 显示的 coffee-script-source 版本为 1.4.0,而另一个应用程序则使用 coffee-script-source 版本为 1.6.1。

我没有注意到这一点,因为 coffee-rails gem 没有严格指定此依赖项(在我的两个 Gemfile 中,我都使用了 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命令。希望这能帮助到其他可能遇到此问题的人。


4
新版本比之前的版本更糟糕,这很奇怪。 - Pencilcheck
1
我正在使用1.6.3版本,但是它没有行号,基本上没什么用。我已经切换到使用Node安装的Coffeescript二进制文件。 - Rob

2
这个问题也可以通过这个修补程序来解决,它将行信息嵌入了ruby-coffee-script gem的错误消息中。
如果您正在使用源映射,这个patch可以修复coffee-rails-source-maps gem。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接