Rails 3.2开发环境源映射支持JavaScript

7
我正在开发一个使用Asset pipeline的Rails应用程序。development.rb文件中包含以下内容:
  config.assets.compress = false
  config.assets.compile = true
  config.assets.debug = true

在开发环境中,资产并未打包,每个资产都由Rails单独提供。此时,被单独提供的资产数量超过50个。因此,完整页面重载非常缓慢。
为了在开发环境下获得更快的加载时间,我希望至少将它们合并到几个资产中去,但是这样做,我就无法在Chrome dev工具中单独调试/查看它们。例如:http://d.pr/i/ZFge 在我的了解中,有两种解决方法:...
  config.assets.debug = false

并将它们作为连接的资产服务。

  1. 旧的笨拙方法:@sourceUrl技巧。
  2. 新方法:sourceMaps

是否有指南可以告诉我如何在Rails应用程序中启用它们?我不使用CoffeeScript,因此https://github.com/markbates/coffee-rails-source-maps没有帮助。大多数谷歌搜索都会导向那里。

我正在寻找用于本机JS的解决方案。

1个回答

13

我还没有看到解决这个问题的现成方案。但是构建一个解决方案将非常直接。

以下假设使用 gem uglifier 作为JS压缩器。

Uglifier的第二版有一个创建sourcemap的机制。它具有以下语法:

uglified, source_map = Uglifier.new.compile_with_map(source)

Rails资产管道允许使用以下语法来指定自定义JS压缩器(具有compress方法)

config.assets.js_compressor = Transformer.new

关于此事可在这里阅读

一个简单的Transformer类看起来会像下面这样

class Transformer
  def compress(string)
    if Rails.env.development?
      output, sourcemap = Uglifier.new.compile_with_map(string)

      # write the sourcemap to a file somewhere under public

      sourcemap_comment = "//@ sourceMappingURL=#{sourcemap_path}}\n"

      return output + sourcemap_comment
    else
      Uglifier.compile(string)
    end
  end
end

注意:这不是完整的解决方案,只是解释了概念。您可以在此基础上构建并添加使其更加健壮的方法。


为了解决问题,我放弃了尝试整合它。感觉这会在提供资产的关键部分造成太多麻烦。如果意外出现错误,将会带来太多的头痛。很遗憾,仍然没有官方的方法来解决这个问题。 - Rajat

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