Прекомпиляция активов Rails 3.1 - включает все файлы javascript
Я хочу, чтобы Rails 3.1 собирал больше моих активов для предварительной компиляции. В частности, совпадение по умолчанию для компиляции файлов не добавляет .js
файлы из vendor/assets/javascripts
. Я могу просто добавить активы в список config.assets.precompile
, но это кажется раздражающим. Я не хочу ссылаться на них в манифесте application.js
, потому что я не хочу, чтобы они были включены во все страницы.
Итак, любой способ запросить, чтобы все .js
файлы, найденные в vendor/assets/javascripts
, были предварительно скомпилированы rake assets:precompile
, но без их включения во все страницы?
Ответы
Ответ 1
config.assets.precompile
принимает регулярные выражения и сопоставление подстановочных знаков - поэтому, чтобы все js файлы скомпилировались, без указания каждого по имени, что-то вроде этого должно сделать трюк:
config.assets.precompile << '*.js'
Ответ 2
Я изменил пример, приведенный в настройке 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
}
Ответ 3
# Precompile *all* assets, except those that start with underscore
config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/
Ссылка на 55 минут Blog для полного объяснения.
Это будет прекомпилировать любые активы, а не только JavaScript (.js,.coffee,.swf,.css,.scss)