如何将config.assets.precompile用于目录而不是单个文件?

时间:2012-09-27 04:12:49

标签: ruby-on-rails asset-pipeline

如何在生产中使用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']

5 个答案:

答案 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