Rails 3.1资产预编译 - 包括所有javascript文件

时间:2011-09-02 00:12:36

标签: ruby-on-rails-3.1 asset-pipeline

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

总之,要求.js中找到的所有vendor/assets/javascripts文件都由rake assets:precompile进行预编译,但没有将它们包含在所有页面中?

3 个答案:

答案 0 :(得分:69)

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

config.assets.precompile << '*.js'

答案 1 :(得分:2)

我修改了Rails config.assets.precompile setting to process all CSS and JS files in app/assets中给出的示例,这是我的版本,它从/ app和/ vendor获取除partials之外的所有资源(从_开始)

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
}

答案 2 :(得分:0)

# Precompile *all* assets, except those that start with underscore
config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/

参考55分钟Blog获取完整说明。

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