【问题标题】:ExecJS coffee script not showing line numbers for compile errors (Rails asset pipeline)ExecJS 咖啡脚本未显示编译错误的行号(Rails 资产管道)
【发布时间】:2013-04-28 11:43:59
【问题描述】:

在我的一个 Rails 应用程序中,ExecJS 没有显示咖啡脚本编译错误的行号。我的编译错误消息如下所示:

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)

请注意,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 你看到我的回答了吗?
  • 是的;我花了一分钟;我也将我的设置为 1.5.0,现在很好。我很惊讶功能丢失了。它是开发的核心。

标签: ruby-on-rails coffeescript asset-pipeline execjs


【解决方案1】:

我想通了——这是由于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

希望这可以帮助其他可能遇到这种差异的人。

【讨论】:

  • 奇怪的是新版本怎么更差
  • 我用的是1.6.3,没有行号,基本没用。我已经切换到使用咖啡脚本节点安装提供的二进制文件
【解决方案2】:

这也可以使用this patch that embeds the line information in the error message 来修复ruby-coffee-script gem。

如果您使用源映射,this patch 会修复 coffee-rails-source-maps gem。

【讨论】:

    猜你喜欢
    • 2013-08-26
    • 1970-01-01
    • 2013-01-09
    • 2013-09-07
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    相关资源
    最近更新 更多