9

Grunt花了相當長的時間來編譯css文件,我不確定這是否正常,但是普通的指南針手錶大約需要5秒。Grunt with Compass and Watch compiles slow

所以問題是,如果有什麼辦法可以加快Grunt的編譯時間,還是更好地堅持羅盤觀看?

Running "compass:dist" (compass) task 
♀unchanged images/sprite-sf580a96666.png 
overwrite stylesheets/app.css (3.263s) 
unchanged images/sprite-sf580a96666.png 
overwrite stylesheets/app_fr.css (3.289s) 
Compilation took 11.116s 

Running "watch" task 
Completed in 13.974s at Wed Dec 18 2013 13:53:05 GMT-0500 (Eastern Standard Time- Waiting... 
OK 
>> File "scss\_core.scss" changed. 

Gruntfile.js:

compass: { 
     dist: { 
      options: { 
      config: 'config.rb' 
      } 
     } 
    }, 

    watch: { 
     sass: { 
      files: ['scss/*.scss'], 
      tasks: ['compass:dist'], 
      options: { 
       spawn: false, 
      } 
     }, 
     scripts: { 
      files: ['js/*.js'], 
      tasks: ['concat', 'uglify'], 
      options: { 
       spawn: false, 
      } 
     } 
    } 

}); 

回答

16

隨着什麼西蒙提到有關watch選項咕嚕-的contrib羅盤,你可以使用grunt-concurrent運行兩個過程,有效地grunt watchcompass watch,沿着對方:

concurrent: { 
    watch: { 
     tasks: ['watch', 'compass:watch'], 
     options: { 
      logConcurrentOutput: true 
     } 
    } 
}, 
compass: { 
    watch: { 
     options: { 
      watch: true 
     } 
    } 
} 

如果你想運行從咕嚕指南針構建,部署,或其他任何需要compile而不是watch,則需要進行第二次羅盤​​任務和使用:

compass: { 
    // Compass grunt module requires a named target property with options. 
    compile: { 
     options: {} 
    } 
} 
+0

雖然這適用於重新加載更改的客戶端文件,但如果您的watch任務中包含Expressj,則無法重新加載expressjs。 – gerasalus

+0

@gerasalus我認爲你需要添加'livereload:true'作爲'watch'任務的一個選項。請參閱https://github.com/gruntjs/grunt-contrib-watch#optionslivereload。 –

5

嗯,你can watch using the Grunt-contrib-compass watch option。這將產生指南針手錶,這樣你會有更好的表現。雖然這不允許你觀看多種類型的文件(例如,如果你也注意.coffee文件或者總是重建js等)。

如果您絕對需要grunt-contrib-watch,那麼請確保使用grunt任務激活sass緩存。從你的配置粘貼在這裏,它看起來像。但緩存問題通常是指南針編譯需要很長時間的原因;所以如果我是你,我會再次檢查我的Gruntfile.js。

此外,很多精靈和圖像處理方法可能需要很長時間才能處理。

2

也許晚了一點對這個派對,但萬一這有助於任何人:

我發現grunt-contrib-watch和sass的性能相同。解決這個問題的最好方法似乎是使用不同的手錶插件。我發現grunt-watch-nospawn(與grunt-contrib-watch插件相反)編譯sass要快得多。相當顯着 - 我看到兩秒左右的改進。

如果你想進一步調整速度,你可以使用grunt-sass而不是grunt-contrib-sass,它使用libsass來提供另一個速度增加。

這與autoprefixer結合,例如。 nDmitry的(不能鏈接,沒有代表),這應該填補遺漏Compass留下的功能空白。

希望有所幫助。

+2

即使後來參加這個派對,但[grunt-contrib-watch有一個產卵選項](https://github.com/gruntjs/grunt-contrib-watch#optionsspawn)。不是100%確定是否將其設置爲false與grunt-watch-nospawn完全相同,但聽起來類似。 –

+1

用'grunt-contrib-watch'添加'spawn:false'對我有效,平均編譯時間從'4-5'秒到'0.05'秒。 –

+0

是的,它使用這個選項更快地響應文件變更,並且似乎也更快地處理文件 – cincplug

0

我知道這個問題在這一點上已經過了幾年,但我想我會添加另一個潛在的原因/解決方案。

首先,嘗試使用--verbose開始你的grunt服務器,並觀察你的sass任務大部分時間花在哪裏。有插件會報告每個部分的時間花費的時間,但對我來說,只是看着--verbose的輸出,使得它很清楚延遲的位置。對我來說,這不是真正的sass任務,而是加載不必要的依賴關係。

正如Grunt的GitHub repo上的this問題所述,某些任務可能需要很長時間才能完成的一個原因是Grunt每次運行時都加載所有任務。因此,即使grunt-contrib-watch只在運行compass:dist任務時更改sass文件,grunt仍在加載所有任務及其依賴項。

現在有一個名爲jit-grunt(或npm)的插件可以解決這個問題,只會加載運行任務所需的內容。這有助於我的指南針任務完成得更快。

相關問題