如何在生产中使用config.assets.precompile仅包含'lib / assets / javascripts','lib / assets / stylesheets','vendor / assets / javascripts'和'vendor / assets / stylesheets中的文件“?
基本上类似于:
config.assets.precompile += %w( pagespecific.js anotherpage.js )
但过去常常将特定目录中的文件包含在“app / assets / javascripts”或“app / assets / stylesheets”中。
*编辑:添加我最终用于特定页面的js的解决方案
config.assets.precompile += ['pages/*.js']
答案 0 :(得分:27)
您可以这样写:
config.assets.precompile += ['directory/*']
答案 1 :(得分:3)
编译资产的目的是构建一个(或少量)文件,以最大限度地减少来自浏览器的HTTP请求数。
如果您要单独提供每个文件,那么为什么不禁用预编译?
要按预期使用预编译,请使用Sprockets'require_directory
将整个目录构建到一个文件中:
//= require_directory ./awesome_js_app
...并在config.assets.precompile
数组中列出该文件。
默认情况下,所有CSS都内置于application.css
& JS进入application.js
。您可以使用config/environments/production.rb
中的预编译指令(以及您希望的其他环境)添加更多顶级文件进行编译。例如:
config.assets.precompile += %w( public.css public.js )
然后这些顶级文件中的Sprockets //= require ...
指令将确定最终编译文件的组成。
您可以在布局中使用这些额外的顶级文件来使用不同的CSS& JS用于某些观点。
答案 2 :(得分:1)
将此作为资产路径包含可能会更好一些(根据您的示例解决方案):
config.assets.paths << Rails.root.join('app', 'assets', 'javascripts', 'pages')
它还允许您包含不在资源目录中的路径(例如包含bootstrap-sass
)。然后,这些路径会添加到公共目录中的资源文件夹中,如果使用asset_sync
之类的内容,则会将其推送到资源位置。
答案 3 :(得分:0)
我找到了这个链接,并认为可能对您有所帮助,请参阅
keithgaputis的回答。 Rails config.assets.precompile setting to process all CSS and JS files in app/assets
我认为你可以这样做。
# In production.rb
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
if full_path.starts_with? app_assets_path
puts "excluding asset: " + full_path
false
else
puts "including asset: " + full_path
true
end
else
false
end
}
答案 4 :(得分:0)
从Sprockets 3开始,您可以使用manifest.js文件声明预编译了哪些文件或目录。参见upgrade docs。因此,在您的配置中,您将添加:
config.assets.precompile = %w(manifest.js)
然后在app / assets / config / manifest.js中获得
//= link_directory ../pages .js
如果您还希望预编译嵌套子目录中的js文件,请使用link_tree
。