2012-01-16 49 views
15

我正在升級包含大量SCSS樣式表的rails應用程序以使用資產管道,並且需要爲每個文件包含一些全局變量和mixins。在Rail資產管道中持續存在SCSS變量?

在每個文件的頂部添加幾個@import指令不是很乾,所以我喜歡做這樣的事情:

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

這並不當然的工作,因爲變量不跨文件持久。任何人都知道如何做到這一點?

回答

34

默認清單語法是沒有強大到足以讓你有用薩斯功能,如共享變量,混入等相反,你應:

  1. 重命名application.css到application.scss(或application.css.scss Rails中4或更早)
  2. 而不是使用

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

    廢話,你現在應該使用

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

    這將確保您可以在整個項目中充分利用變量和mixins,並且您保持爲DRY as Sas s允許。

+0

同意。這也是我一直在做的。 – Zubin 2013-04-26 00:46:27

+2

這個解決方案值得指出一個煩惱,那就是你的所有css都會以一個文件結尾。使用application.css的想法是,它仍然單獨加載每個css文件(在dev中),這可以幫助進行QA,因爲您知道每個文件都包含在網絡流量中。 (授予sass您仍然可以檢查問題並在SASS添加的註釋中查看它來自的.scss文件) – gcoladarci 2013-12-14 13:32:31

+1

我相信您可以使用rails輸出源地圖(http://fonicmonkey.net/2013/03/25/ native-sass-scss-source-map-support-in-chrome-and-rails /),所以你可以直接檢查源文件。 – 2013-12-17 17:59:52

2

似乎不可能。結束每個文件@import 'includes/all';幷包括includes/all.css.scss其他所有內容。

5

簡單地從每個Scss或Sass文件導入必要的文件似乎已經爲我工作。例如,我有一個包含一些常數這樣的colors.scss文件:與一些其他文件清單

$black: #222; 

我需要在我application.css:

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

在我的按鈕。 css.scss文件,我只是這樣做是爲了避免錯誤:

@import "colors"; 
+0

這裏的文檔也可能有幫助:https://github.com/rails/sass-rails/ – 2012-07-06 08:12:32

+2

這並不能解決問題。目標是避免需要從每個scss文件導入它們。你的答案和我的一樣。無論如何,謝謝:) – Zubin 2012-07-07 02:23:31