如何让 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-source
1.5.x 在编译异常中给出了行号,而coffee-script-source
1.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 资产管道生成源地图?的主要内容,如果未能解决你的问题,请参考以下文章
sass-rails 资产管道:生成图像路径不正确; `url(/images/blah.png)` 而不是 `url(/assets/blah.png)`