2012-10-26 85 views
4

要編譯多個目錄中的.scss文件,我們需要使用「add_import_path」(http://compass-style.org/help/tutorials/configuration-reference/),但我沒有得到如何。指南針,添加導入路徑

我試着在我config.rb添加

additional_import_paths 
add_import_path "_themes" 
add_import_path = "_themes" 
additional_import_paths = "_themes" 

,但沒有運氣,只有北斗從sass_dir編譯= 「_modules」


更新:是的,這線

add_import_path "_themes" 

犯規給了我們「沒有發現文件夾」的錯誤,但指南針STI不會編譯.scss在裏面

我在做什麼錯?

回答

1

要編譯多個.scss文件,您應該使用@import "filename";將「子」文件導入「父」SASS文件。

例如,如果你有main.scss,你可能希望從打了個比方孩子樣式表導入更多的CSS child.scss這樣的:

@import "_modules/child"; 

據我所知,所有的add_import_path所做的是允許您從其他目錄導入文件。所以你也可以@import_themes/

請參閱this thread

7

這裏有一個可接受的答案,但我不認爲它回答了這個問題,但給出了一個替代解決方案。這是非常好的,我不想侮辱任何人,但是這裏不是什麼信息是關於add_import_path以及它爲你做什麼。

如果有人曾在Magento工作過,那麼您熟悉它的主題和模板文件的後備結構。爲了設置多個使用相同默認外觀的商店,我們需要包含一個回退結構,以便對預定義的層次結構進行更改。因此,檢查DIS config.rb文件

myThemeA - config.rb

require "font-awesome-sass" 
http_path = "/skin/frontend/rwd/myThemeA/" 
add_import_path "../../../rwd/default/scss" 
css_dir = "../css" 
sass_dir = "../scss" 
images_dir = "../images" 
javascripts_dir = "../js" 
fonts_dir = "../css/fonts" 
relative_assets = true 

output_style = :expanded 
environment = :production 
sourcemap = true 

myThemeB - config.rb

require "font-awesome-sass" 
http_path = "/skin/frontend/rwd/myThemeB/" 
add_import_path "../../../rwd/default/scss" 
additional_import_paths = ["../../../rwd/myThemeA/scss"] 
css_dir = "../css" 
sass_dir = "../scss" 
images_dir = "../images" 
javascripts_dir = "../js" 
fonts_dir = "../../myThemeA/css/fonts" 
relative_assets = true 

output_style = :expanded 
environment = :production 
sourcemap = true 

所以這裏的想法是,我們有三個外觀和我們可以使用導入路徑只覆蓋某些文件,而不是在每個外觀中包含EVERY文件。這也意味着,當我們想要進行全球變化時,取決於我們所做的改變,我們沒有做出3次改變 - 僅僅是它的依賴性將放在鏈條中。

所以...

默認是所有的皮膚的基礎

myThemeA是皮膚本身,並使用默認的,因爲它是默認

myThemeB使用myThemeA爲它的默認,而myThemeA使用默認,因爲它是默認。

是什麼使這項工作是add_import_pathadditional_import_paths的安置。本質上,它使用add_import_path作爲默認值,然後後續additional_import_paths陣列將覆蓋add_import_path中的內容,但是沒有包含在附加內容中的任何內容都會在默認值中查找。

希望這對任何在導入路徑上尋找更多信息的人都有意義。

+1

我注意到'add_import_path'行爲的一個導入方面: 如果sass編譯使用在導入路徑中找到的文件,例如\ _framework.scss,然後在該文件中的任何導入,例如@import「var」然後將相對於_that_文件,而不是我們所在的原始文件夾結構。這意味着(使用您的示例),如果您在myThemeB中有\ _var.scss文件,但您沒有myThemeB中的\ _framework.scss文件,則不會使用myThemeB \ _var.scss文件。這很煩人,因爲即使不改變它們,也必須在主題中包含文件。 –

+0

不要脫離正切,但是,我相信這是LESS對SASS/SCSS的優勢。延遲加載認爲這個問題是惰性的,因爲它將在編譯過程中利用該變量的最近加載的定義。我還沒有和Rudy SASS一起玩過。看起來他們正在使用固有的惰性加載的CSS變量? https://github.com/sass/sass/issues/2119 – Plummer

+0

約克夏熊描述的是我今天嘗試建立Plummer所描述的主題環境時所經歷的確切行爲,它花了我一段時間才意識到我我試圖實現簡單是不可能的。有沒有解決方法? – loeffel