Django WhiteNoise 反复收集静态 post-处理 CSS 个文件

Django WhiteNoise collectstatic repeatedly post-processes CSS files

我在我的 Django 项目中成功使用了 WhiteNoise。

我的问题是在 运行 执行 collectstatic 命令时。 WhiteNoise post-处理我所有的 .css 文件,即使它们没有改变。它不会不必要地 post-处理 .js 或 .png 文件,只处理 .css 文件。

这似乎是 WhiteNoise 中的一个错误。还有其他人看到过这种行为吗?

例子:

我第一次运行collectstatic,所有的文件都被django复制并且post-由WhiteNoise处理:

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(不修改任何文件),WhiteNoise post-再次处理 .css 文件:

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

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

这对我来说是个问题,因为我正在考虑在开发和生产中使用 WhiteNoise,以尽量减少我的开发和生产环境之间的差异。 每当我更改任何文件时,等待 WhiteNoise post-处理项目中的每个 .css 文件(包括任何库)显然要求开发环境太多了。

这感觉像是 WhiteNoise 中的错误,因为它正确地注意到 .js 和 .svg 文件没有更改,但 .css 文件没有。 还有其他人看到过这种行为吗?

这是 Django 的一个特性,而不是 WhiteNoise 中的错误:CSS 文件可以包含对其他静态文件(通常是图像)的引用,并且缓存清除机制导致这些图像文件的名称每当他们的内容改变时改变。因此,即使原始 CSS 文件没有发生变化,CSS 文件的处理后输出也可能会发生变化,只是因为它所引用的图像之一已更改其内容。这就是为什么 Django reprocesses 每次 CSS 文件。

不过,您不需要 运行 collectstatic 在开发中获取对文件的更改。当 DEBUG 设置为 True 时,WhiteNoise 遵循标准的 Django 行为直接提供未处理的文件。