49

我希望 Rails 3.1 获取更多我的资产进行预编译。特别是,用于编译文件的默认匹配器不会.jsvendor/assets/javascripts. 我可以将资产添加到config.assets.precompile列表中,但这似乎很烦人。我不想在application.js清单中引用它们,因为我不希望它们包含在所有页面中。

总而言之,有什么方法可以请求.js在 中找到的所有文件vendor/assets/javascripts都由 预编译rake assets:precompile,但不将它们包含在所有页面中?

4

3 回答 3

70

config.assets.precompile接受正则表达式和通配符匹配 - 所以要确保所有js 文件都被编译,而不用指定每个文件的名称,这样的事情应该可以解决问题:

config.assets.precompile << '*.js'
于 2011-09-07T00:59:42.787 回答
2

我修改了 Rails config.assets.precompile 设置中给出的示例以处理 app/assets 中的所有 CSS 和 JS 文件,这是我的版本,它从 /app 和 /vendor 获取所有资产,除了部分(从_开始)

config.assets.precompile << Proc.new { |path|
  if path =~ /\.(css|js)\z/
    full_path = Rails.application.assets.resolve(path).to_path
    app_assets_path = Rails.root.join('app', 'assets').to_path
    vendor_assets_path = Rails.root.join('vendor', 'assets').to_path

    if ((full_path.starts_with? app_assets_path) || (full_path.starts_with? vendor_assets_path)) && (!path.starts_with? '_')
      puts "\t" + full_path.slice(Rails.root.to_path.size..-1)
      true
    else
      false
    end
  else
    false
  end
}
于 2013-03-21T17:05:59.500 回答
0
# Precompile *all* assets, except those that start with underscore
config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/

参考 55minutes博客的完整解释。

这将预编译任何资产,而不仅仅是 JavaScript(.js、.coffee、.swf、.css、.scss)

于 2014-04-16T22:09:03.313 回答