2016-08-03 54 views
0

我在我的Django項目中成功使用了WhiteNoise。Django WhiteNoise collectstatic反覆後處理CSS文件

我的問題是運行collectstatic命令時。 WhiteNoise後處理所有我的.css文件,即使它們沒有改變。它不會不必要地後處理.js或.png文件,只有.css文件。

這看起來像是在WhiteNoise中的一個錯誤。有沒有其他人看到過這種行爲?

一個例子:

我第一次跑collectstatic,所有的文件都是由Django的複製和白噪聲後處理:

Copying '<path...>.svg' 
Copying '<path...>.js' 
Copying '<path...>.css' 
Copying '<path...>.txt' 
... etc ... 
Post-processed '<path...>.svg' 
Post-processed '<path...>.js' 
Post-processed '<path...>.css' 
Post-processed '<path...>.txt' 
... etc ... 

77 static files copied to 'C:\<path...>\staticfiles', 77 post-processed. 

這是所有工作正常。

但是,如果我立即再次運行collectstatic(無需修改任何文件),白噪聲後處理再次.css文件:

Post-processed '<path...>.css' 
Post-processed '<path...>.css' 
... etc ... 

0 static files copied to 'C:\<path...>\staticfiles', 77 unmodified, 13 post-processed. 

這是我的問題,因爲我在開發中使用白噪聲作爲考慮和生產一樣,以儘量減少我的開發和生產環境之間的差異。 當我更改任何文件時,等待WhiteNoise後處理項目中的每個.css文件(包括任何庫)顯然太多以至於無法提供開發環境。

這感覺就像是一個WhiteNoise中的錯誤,因爲它正確地注意到.js和.svg文件沒有改變,但沒有改變.css文件。 有沒有其他人看到過這種行爲?

回答

3

這是Django的一個功能,而不是WhiteNoise中的一個錯誤:CSS文件可以包含對其他靜態文件(通常爲圖像)的引用,緩存清除機制會導致這些映像文件的名稱在內容更改時發生更改。所以,即使原始CSS文件沒有,CSS文件的處理後的輸出也可以改變,只是因爲它引用的圖像之一已經改變了它的內容。這是每次Django reprocesses這個CSS文件的原因。

但是,您不需要在開發中運行collectstatic即可獲取文件的更改。當DEBUG設置爲True時,WhiteNoise會遵循標準Django直接提供未處理文件的行爲。

+0

非常感謝!我沒有意識到WhiteNoise在調試模式下不需要使用collectstatic,這會大大加快我的調試周期。令人遺憾的是,Django無法確定哪些CSS文件需要重新處理,但對生產版本而言效率並不高,無論如何,這通常都是從乾淨的地方完成的。 –