2014-05-15 101 views
5

我不知道我是否可以在不粘貼所有文件的整個代碼的情況下解釋問題,但我會嘗試。指南針/ SASS - 並非所有文件都被編譯

編輯我已經添加了整個代碼Github上的帳戶 - My Sass structure

我使用的是Windows 8.1和指南針0.12.6

在我的public_html文件夾我有config.rb文件和文件夾的樣式表。在樣式表文件夾中,我有保存所有sass文件的目錄sass。 CSS文件生成到樣式表/預覽文件夾(用於開發目的)和樣式表文件夾(用於生產目的)。

我跑指南針看運行watch.bat腳本,我在的public_html文件夾

watch.bat的內容是:

START compass watch -c config.rb -e development 
START compass watch -c config.rb -e production 
EXIT 

我config.rb文件是:

require 'compass/import-once/activate' 
# Require any additional compass plugins here. 

# Set this to the root of your project when deployed: 
http_path = "../" 

sass_dir = "stylesheets/sass" 
images_dir = "img" 
javascripts_dir = "js" 
cache = false 
relative_assets = true 


add_import_path "stylesheets/sass" 


if environment == :development 
    css_dir = "stylesheets/preview" 
    line_comments = true 
    output_style = :nested 
end 

if environment == :production 
    css_dir = "stylesheets" 
    line_comments = false 
    output_style = :compressed 
end 

在stylsheets/sass我有4個文件print.scss,medium.scss,small.scss和large.scss

兩者medium.scss和large.scss開頭:

@import "base/_init"; 

此文件的導入部分_init從基本文件夾和該一個加載另一個分音和其它諧音加載另一個分音。

問題是,當我改變部分指南針的東西並不總是編譯所有必要的輸出文件。例如,我剛剛在_settings.scss中更改了部分內容,並且最後通過medium.scss和large.scss加載了這些內容(我提醒那些2個文件具有相同的開頭,這樣它們都應該被編譯)。不知何故,只有medium.scss文件正在被監視,並且large.scss文件沒有被編譯,因爲它應該在這種情況下。

我剛纔有這樣的情況。我採空2個觀察家(CTRL + C和Y),然後再次運行中的文件我watch.bat不改變任何東西 - 只是運行後,我有信息:在15:51檢測

變化:33到:large.scss覆蓋樣式表/ preview/large.css 指南針正在輪詢更改。按下Ctrl-C停止。

變化在15點51分33秒檢測出:large.scss覆蓋樣式表/ large.css 羅盤更改輪詢。按下Ctrl-C停止。

所以其實有變化應關注,但不知何故指南針/青菜並不總是抓住它。

有時既不2個觀察家趕上變化,我必須阻止他們,並再次運行watch.bat,所以它不是很方便的工作方式。

有時甚至發生觀察家停止(爲我presed CTRL + C + Y),但我沒有按任何東西,在cmd中沒有關於關閉可見的問題。他們剛剛停止

問題:什麼可能是錯誤的,以及如何解決它?

+1

提示:您可以使用您當前的項目結構在Github中創建一個回購嗎?這樣,這裏的某個人可以克隆它並重現你的環境。 –

+0

感謝您的建議。我剛剛將我的項目結構添加到github –

回答

4

我已經克隆並檢查你的項目結構,你的問題很簡單。一旦插件不需要使用進口的。如果你評論你的config.rb的第一行(這個插件被激活),你的樣式表將被正常編譯。您擁有的每個主scss文件(large.css,medium.css,small.css)都會呈現爲一個單獨的css文件,並且您不會爲這些文件中的每一個重複導入。

下面是你的進口與進口一旦禁用插件的順序:

enter image description here

+0

您能否解釋它如何影響我目前的項目?據我所知,這個指令使我在使用import'aaa'的時候;導入'aaa'; 'aaa'只會被導入一次。問題是,有時一切正常,有時它不(我還沒有測試評論此線) –

+0

雖然我從來沒有使用過這個插件,我認爲它忽略了已經導入的文件中的變化(例如:如果你正在導入_init.scss兩次,一個在large.scss中,第二次在medium.scss中,最後一個@import將被忽略,並且這是完全錯誤的行爲,一旦你真的需要在這兩種情況下導入這個文件)。 –

+0

import-once有一個好目標,但是當多個(輸出).scss文件中包含相同的部分時會導致問題。儘管是「最佳實踐」,但指南針似乎完全適用於具有單個輸出文件的項目。 https://github.com/Compass/compass/blob/master/import-once/README.md – TheSean

0

我dont't知道如何解決你的問題。

我覺得基本上這是在同一時間對同一文件夾指南針運行的兩個實例錯誤或問題。

但由於您的環境,我有一個建議,可以爲你做的伎倆。

爲什麼不用兩個文件夾與資產,一個刺激。和開發人員,你只需保留一個開發人員。和刺激。

你可以在羅盤上設置的是以你想要的方式輸出css。然後通過yui過濾器(或其他)來傳遞該CSS。這將縮小所有資產。如果您正在使用symfony,則可以使用資產。 這就是我們的方式,完美的作品。我們不使用assetics羅盤......這是另一個話題:d

如果你不使用任何框架或額外的過濾器,可以送花兒給人手工轉儲資產時,這的有準備投產。

這樣你可以避免使用兩個羅盤情況下在同一時間,也手工編譯對生產的每一個部署。

我真的認爲它有兩個指南針運行的實例。