Rails 3.1资产预编译 – 包括所有的JavaScript文件

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

总而言之,可以通过任何方式请求在vendor/assets/javascriptsfind的所有.js文件被rake assets:precompile ,但不包含在所有页面中?

config.assets.precompile接受正则expression式和通配符匹配 – 所以为了确保所有的 js文件都被编译,而不是通过名称来指定每个文件,像这样的应该做的伎俩:

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

我修改了在Rails config.assets.precompile设置中给出的示例来处理应用程序/资产中的所有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 } 
 # Precompile *all* assets, except those that start with underscore config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/ 

参考55分钟的博客的全面解释。

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