如何让 Rails 资产管道生成源地图?

Posted

技术标签:

【中文标题】如何让 Rails 资产管道生成源地图?【英文标题】:How can I get the Rails asset pipeline to produce source maps? 【发布时间】:2013-01-13 17:17:45 【问题描述】:

我想让 Rails 在编译后的 coffeescript/minified JS 旁边生成源映射,以便更好地记录错误。不过,网上似乎还没有关于如何做到这一点的全面文档。有人做过吗?

我在 Rails 3.2 和 Heroku 上。

【问题讨论】:

源图 - 它是什么? 源映射是一种将混淆/编译/压缩的源代码映射回其原始形式的方法。 html5rocks.com/en/tutorials/developertools/sourcemaps 您是否看到或听到现在(在 RoR 开发环境中)是否有可能? 有人提到这在边缘轨道中是可能的,我只看到了一些针对咖啡脚本地图的黑客攻击。 hm...有趣...现在我只是在我的 IDE RubyMine 中使用“重新格式化代码”功能。它将代码重新格式化为半可读状态(基本上返回行和选项卡)......但是,当然,它变得与原来的不一样 【参考方案1】:

Rails 支持缩小 javascript 的源映射! Rails 依赖Sprockets 进行资产编译,并且在this pull request 中向Sprockets 添加了源映射支持。

【讨论】:

您的编辑来自 2014 年 - 只是想确认分支已发布? Sprockets 4.x 尚未发布。您可以在此处跟踪发布:github.com/rails/sprockets/releases【参考方案2】:

如果您不是真的想要源映射,而只是想要 coffee-script 编译异常中的行号,试试这个:

过去,在您的 Gemfile 中仅包含 coffee-rails 会在原始的 coffeescript 源代码中产生带有行号的异常。然后,它们以无行号的异常消失了。我做了一些挖掘,发现coffee-script-source1.5.x 在编译异常中给出了行号,而coffee-script-source1.6.x 没有。我相信这是一个错误,如果将来“修复”这个问题,我不会感到惊讶。

# Gemfile
gem 'coffee-rails', '~> 4.0.0'
  gem 'coffee-script-source', '~> 1.5.0' # 1.6 doesn't include line numbers in exceptions

然后你会得到像 ('coffee-script-source', '~> 1.5.0')这样的异常

Showing /Users/.../app/views/layouts/application.html.erb where line #12 raised:

SyntaxError: missing  on line 15
  (in /Users/.../app/assets/javascripts/app.js.coffee)

而不是 ('coffee-script-source', '~> 1.6.3')

Showing /Users/.../app/views/layouts/application.html.erb where line #12 raised:

SyntaxError: missing 
  (in /Users/.../app/assets/javascripts/app.js.coffee)

【讨论】:

这也可以用this patch that embeds the line information in the error message 修复ruby-coffee-script gem。【参考方案3】:

对此进行了测试。有用。 https://github.com/markbates/coffee-rails-source-maps。但是,它会使您的资产渲染速度慢得多。

【讨论】:

如果您正在使用源映射,this patch 修复了语法错误的行号问题coffee-rails-source-maps gem。【参考方案4】:

这看起来应该可以工作:http://alexspeller.com/2012/09/15/Source_maps_for_coffeescript_in_rails.html

不过,请记住最后的警告:

重要提示:这种相当残酷的 hack 取代了正常的 通过使用 CoffeeScriptRedux 编译咖啡脚本 编译器,实际上还没有完成。这只是证明 概念,你可能不应该使用它。

所以我不建议在生产环境中运行它,但如果你有一个暂存环境(也在 Heroku 上,也使用缩小的 Javascript),它可能会很有用。

【讨论】:

以上是关于如何让 Rails 资产管道生成源地图?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 5 - 如何在资产管道中包含所有供应商资产?

使用 Rails 3.1 资产管道有条件地使用某些 css

sass-rails 资产管道:生成图像路径不正确; `url(/images/blah.png)` 而不是 `url(/assets/blah.png)`

Rails 3.1 资产管道:如何加载特定于控制器的脚本?

带有子域的 Rails 资产管道不检索图像

如何将dojo工具包与rails 3.1资产管道和coffeescript一起使用?