我在Django项目中成功使用了WhiteNoise。
我的问题是在运行collectstatic
命令时。 WhiteNoise对所有.css文件进行后处理,即使它们没有更改。它不会不必要地后处理.js或.png文件,只有.css文件。
这似乎是WhiteNoise中的一个错误。还有其他人看到过这种行为吗?
示例:
我第一次运行collectstatic
时,所有文件都由django复制并由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会再次对.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对项目中的每个.css文件(包括任何库)进行后期处理显然太多,无法要求开发环境。
这感觉就像是WhiteNoise中的一个错误,因为它正确地注意到.js和.svg文件没有改变,但没有改变.css文件。 还有其他人看到过这种行为吗?
答案 0 :(得分:3)
这是Django的一个功能,而不是WhiteNoise中的一个错误:CSS文件可以包含对其他静态文件(通常是图像)的引用,缓存破坏机制会导致这些图像文件的名称在内容发生变化时发生变化。因此,即使原始CSS文件没有,CSS文件的处理输出也可以改变,因为它引用的图像之一已经改变了它的内容。这就是每次Django reprocesses CSS文件的原因。
然而,您无需在开发中运行collectstatic
来获取对文件的更改。当DEBUG
设置为True时,WhiteNoise遵循直接为未处理文件提供服务的标准Django行为。