在rails资产管道中保留SCSS变量?

时间:2012-01-16 23:35:55

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

我正在使用大量SCSS样式表升级rails应用程序以使用资产管道,并且需要为每个文件包含一些全局变量和mixin。

在每个文件的顶部添加几个@import指令不是很干,所以我想做这样的事情:

# application.css
/*
*= require variables
*= require mixins
*= require_tree .
*/

这当然不起作用,因为变量不会跨文件持久化。有谁知道如何实现这个目标?

4 个答案:

答案 0 :(得分:36)

默认的清单语法不够强大,无法为您提供有用的Sass功能,如共享变量,mixins等。相反,您应该:

  1. 将application.css重命名为application.scss(或Rails 4或更早版本中的application.css.scss)
  2. 而不是使用

    /*
     *= require variables
     *= require mixins
     *= require_tree .
     */
    

    废话,你现在应该使用

    @import "variables";
    @import "mixins";
    @import "blah"; // import each SCSS file in your project like this.
    

    这将确保您在整个项目中充分利用您的变量和混合物,并且您可以像Sass一样保持干燥状态。

答案 1 :(得分:6)

从每个Scss或Sass文件中导入必要的文件似乎对我有用。例如,我有一个colors.scss文件,其中包含一些这样的常量:

$black: #222;

我在application.css清单中需要它以及其他一些文件:

/*
 *= require colors
 *= require buttons
*/

在我的buttons.css.scss文件中,我只是这样做是为了避免错误:

@import "colors";

答案 2 :(得分:2)

似乎不可能。结束时使用@import 'includes/all';预先添加每个文件,并包含includes/all.css.scss中的所有其他内容。

答案 3 :(得分:0)

使用@import替换require并删除任何= require,即使您认为自己已将其注释掉。