将资产管道与文件组一起使用

时间:2011-11-21 21:55:47

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

在资产管道的Rails文档中,它声明:

  

Rails 3.1及更高版本中的默认行为是连接所有内容   文件分为一个主文件,每个文件用于JS和CSS。但是,你可以   如果需要,单独的文件或文件组(见下文)

如何将文件分成指定的组?例如,如果我有一个也有管理区域的应用程序,我想创建三个编译文件:

shared.css(前端和后端都使用此)
application.css(仅限前端)
admin.css(仅限后端)

默认将我的所有文件合并到application.css中。

2 个答案:

答案 0 :(得分:5)

您需要为每个区域创建一个清单。例如:

<强> admin.css:

/*
 *= require shared/nomalize
 *= require shared/960.css
 *= require admin/base
 *= require admin/tables
 */

<强> shared.css:

/*
 *= require shared/nomalize
 *= require shared/960.css
 *= require public/base
 *= require public/branding
 */

您可以自由创建用于保存共享,公共和管理CSS的文件夹,并根据需要提供这些文件夹。您必须从任何清单中删除require_tree指令

在布局中引用这些:

<%= stylesheet_link_tag "application" %>
<%= stylesheet_link_tag "admin" %>

并将附加清单添加到预编译数组中:

config.assets.precompile += ['admin.js', 'admin.css']

答案 1 :(得分:3)

显然,我的阅读理解非常缺乏(tl; dr)。看来,当你使用

stylesheet_link_tag 'application'

我查看了 app / assets / stylesheets / application(css | sass)以获取一个清单文件,该文件定义了要包含的工作表。

所以我可以使用

stylesheet_link_tag 'admin'

在我的后端寻找那个清单。所以这就是我的资产结构看起来如何:

/app
  /assets
    /stylesheets
      admin.css
      application.css
      /admin
        screen.css
      /application
        screen.css
      /shared
        layout.sass
        reset.css
        typography.sass

admin.css和application.css是我的清单,它们分别如下所示:

/** admin.css
 *= require_self
 *= require shared/reset
 *= require shared/layout
 *= require shared/typography
 *= require admin/screen
*/

/** application.css
 *= require_self
 *= require shared/reset
 *= require shared/layout
 *= require shared/typography
 *= require application/screen
*/

您可以看到每个只引用共享工作表,然后需要特定于上下文的工作表。