2

我为每个控制器都有一个单独的 scss 文件,并且我不会将它们全部导入 application.css 文件,以便我可以在布局中包含控制器特定的样式表和 js 文件。

所以在布局中我这样做:

<%= stylesheet_link_tag "application" %>
<%= stylesheet_link_tag params[:controller], :media => "all" %>
<%= javascript_include_tag 'application' %>
<%= javascript_include_tag params[:controller] %>

但是当我运行 rake assets:precompile 时,我没有得到控制器的编译资产。

我在网上寻找解决方案,但他们都表示将所需的文件添加到 config.assets.precompile 状态。而且我不知道该放什么,以便 app/assets/stylesheets 的子文件夹和 app/assets/javascripts 的子文件夹中的所有资产自动编译。

更新 1

好的,我将它们全部编译到一个文件中,但是有两个问题:

  1. 我有一个 _base.scss 文件,其中包含所有需要的变量和导入,并将 application.css 重命名为 application.css.scss 以便我可以先导入该文件:

    @import 'base';
    @import 'style';
    @import 'forms';
    

我需要如何使用清单来做到这一点?找不到使用 scss 本身导入整个目录的方法。

  1. 我对不同控制器中的相同选择器有一些不同的操作。分离这些动作并定义女巫应该在特定页面上处理的最简单方法是什么?
4

3 回答 3

2

解决方案:

到文件 config/application.rb

添加这一行:

config.assets.precompile += ["controller1.js", "controller1.css", "controller2.js", "controller3.js"]

下次你运行 assets:precompile 它也会编译这个文件

于 2012-07-12T15:08:25.637 回答
0

怎么样:

config.assets.precompile += Dir::entries("app/assets/javascripts").
                               map{|f| f[/^(?!application\.).*\.js/]}.compact
于 2013-03-09T16:06:35.107 回答
0

这是一个坏主意,因为它为每个页面加载添加了额外的 HTTP 请求,需要大量额外的文件(其中大部分是空的,很少会有实际的控制器特定的 CSS/JS),并且忽略浏览器缓存(缓存application.css/js 一次就​​忘了它)。

最好以这样一种方式编写您的 CSS/JS,以便您可以将它们全部包含在一起并正确使用资产管道。

于 2012-04-22T07:17:12.123 回答