Ruby on rails 3.1 在rails资产管道中持久化SCSS变量?

Ruby on rails 3.1 在rails资产管道中持久化SCSS变量?,ruby-on-rails-3.1,asset-pipeline,sass,Ruby On Rails 3.1,Asset Pipeline,Sass,我正在升级一个带有大量SCSS样式表的rails应用程序,以使用资产管道,并且需要为每个文件包含一些全局变量和混合 在每个文件的顶部添加几个@import指令并不是很枯燥,因此我想这样做: # application.css /* *= require variables *= require mixins *= require_tree . */ $black: #222; 当然,这不起作用,因为变量不会在文件中持久化。有人知道如何做到这一点吗?似乎不可能。最后在每个文件前面加上@impo

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

在每个文件的顶部添加几个
@import
指令并不是很枯燥,因此我想这样做:

# application.css
/*
*= require variables
*= require mixins
*= require_tree .
*/
$black: #222;

当然,这不起作用,因为变量不会在文件中持久化。有人知道如何做到这一点吗?

似乎不可能。最后在每个文件前面加上
@import'includes/all'
和包含
包含/all.css.scss

中的所有其他内容,从每个scss或Sass文件导入必要的文件似乎对我很有效。例如,我有一个colors.scss文件,其中包含如下常量:

# application.css
/*
*= require variables
*= require mixins
*= require_tree .
*/
$black: #222;
我需要在application.css清单中包含它以及其他一些文件:

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

@import "colors";

默认清单语法的功能不足以为您提供有用的Sass功能,如共享变量、混合等。相反,您应该:

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

    /*
     *= require variables
     *= require mixins
     *= require_tree .
     */
    
    胡说,你现在应该用

    @import "variables";
    @import "mixins";
    @import "blah"; // import each SCSS file in your project like this.
    
    这将确保您在整个项目中充分利用变量和混合,并尽可能保持Sass允许的干燥


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

    这并不能解决问题。目的是避免从每个scss文件导入它们。你的答案和我的一样。无论如何谢谢:)同意。这也是我一直在做的。值得指出的是,这个解决方案的一个烦恼是,所有的css最终都在一个文件中。css的想法是它仍然单独加载每个css文件(在开发中),这有助于QA,因为您知道网络流量中包含的每个文件。(通过sass,您仍然可以检查问题,并在sass添加的注释中看到它来自的.scss文件)我相信您可以使用rails输出源代码映射(),因此您可以直接检查源文件。在使用新的
    @import
    语法时,您是否仍然可以使用
    /*=require_tree.
    ,但是,如果不使用
    @import
    ,就失去了重用mixin或变量等的好处。所以最好完全切换到
    @import