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

Zub*_*bin 20 sass ruby-on-rails-3.1 asset-pipeline

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

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

# application.css
/*
*= require variables
*= require mixins
*= require_tree .
*/
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用,因为变量不会跨文件持久存在.谁知道如何实现这一目标?

Ada*_*wen 39

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

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

    /*
     *= require variables
     *= require mixins
     *= require_tree .
     */
    
    Run Code Online (Sandbox Code Playgroud)

    废话,你现在应该使用

    @import "variables";
    @import "mixins";
    @import "blah"; // import each SCSS file in your project like this.
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 在使用新的 `@import` 语法时,你还能使用 `/*= require_tree .` 吗? (3认同)
  • 值得指出的是,这个解决方案的一个烦恼就是你所有的css最终都在一个文件中.application.css的想法是它仍然单独加载每个css文件(在开发中),这可以帮助QA,因为您知道网络流量中包含的每个文件.(授予sass,你仍然可以检查问题,并在SASS添加的评论中查看它来自的.scss文件) (2认同)

Ava*_*iri 7

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

$black: #222;
Run Code Online (Sandbox Code Playgroud)

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

/*
 *= require colors
 *= require buttons
*/
Run Code Online (Sandbox Code Playgroud)

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

@import "colors";
Run Code Online (Sandbox Code Playgroud)

  • 这并没有解决问题.目标是避免从每个scss文件导入它们.你的答案和我一样.不管怎么说,还是要谢谢你 :) (2认同)