這裏有一個可接受的答案,但我不認爲它回答了這個問題,但給出了一個替代解決方案。這是非常好的,我不想侮辱任何人,但是這裏不是什麼信息是關於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_path
和additional_import_paths
的安置。本質上,它使用add_import_path
作爲默認值,然後後續additional_import_paths
陣列將覆蓋add_import_path
中的內容,但是沒有包含在附加內容中的任何內容都會在默認值中查找。
希望這對任何在導入路徑上尋找更多信息的人都有意義。
我注意到'add_import_path'行爲的一個導入方面: 如果sass編譯使用在導入路徑中找到的文件,例如\ _framework.scss,然後在該文件中的任何導入,例如@import「var」然後將相對於_that_文件,而不是我們所在的原始文件夾結構。這意味着(使用您的示例),如果您在myThemeB中有\ _var.scss文件,但您沒有myThemeB中的\ _framework.scss文件,則不會使用myThemeB \ _var.scss文件。這很煩人,因爲即使不改變它們,也必須在主題中包含文件。 –
不要脫離正切,但是,我相信這是LESS對SASS/SCSS的優勢。延遲加載認爲這個問題是惰性的,因爲它將在編譯過程中利用該變量的最近加載的定義。我還沒有和Rudy SASS一起玩過。看起來他們正在使用固有的惰性加載的CSS變量? https://github.com/sass/sass/issues/2119 – Plummer
約克夏熊描述的是我今天嘗試建立Plummer所描述的主題環境時所經歷的確切行爲,它花了我一段時間才意識到我我試圖實現簡單是不可能的。有沒有解決方法? – loeffel