+++ title = "Hugo 推送到生产环境不构建 SCSS 的问题" date = 2026-02-15 13:22:02 tags = ['Hugo','运维'] +++ 为了给博客添加[主题切换按钮](https://src.eltr.ac/eltrac/geedeapro/commit/52758459a220fde27f1519d3fd3e99f3f2a52f80),将原先通过媒体查询(`@media` query)实现的暗色模式切换到了用 CSS 类名(`.dark`)实现,在本地测试无误,但合并到 `master` 分支并在 VPS 上构建之后,却出现了问题——当系统配色方案是「暗色」时,就算主动将站内的主题切换为「亮色」,也仍然会保持暗色背景;反之,在系统亮色方案下,将站内主题切换为「暗色」,却没有这个问题。 排查后发现,在本地构建的 Hugo 网站没有这个问题,但是在 VPS 上构建的网站,仍然使用了老旧的 `@media` 媒体查询方案,即便源代码都是一样的,构建结果却有所不同。 在后续的开发中,发现了类似的问题:修改了 SCSS 文件,本地测试没有问题,但推送到生产环境后,在 VPS 上构建的网站却没有使用最新的 SCSS,仍然使用过时的样式。 ## Hugo 的构建缓存? Hugo 的确会缓存资源文件,见[文档](https://gohugo.io/configuration/caches/)。不过,一般来说只会在构建过程中缓存,避免在同一个构建过程中反复从磁盘中读取相同的文件;也会在多次构建之间缓存,但照例来说不会持续好几天都只能读取到旧文件。 以下是 Hugo 默认的缓存配置。 ```toml [caches] [caches.assets] dir = ':resourceDir/_gen' maxAge = -1 [caches.getresource] dir = ':cacheDir/:project' maxAge = -1 [caches.images] dir = ':resourceDir/_gen' maxAge = -1 [caches.misc] dir = ':cacheDir/:project' maxAge = -1 [caches.modulequeries] dir = ':cacheDir/modules' maxAge = '24h' [caches.modules] dir = ':cacheDir/modules' maxAge = -1 ``` 可见,除了模块查询(`module queries`)默认缓存一天之外,包括静态资源在内的其他内容都是默认没有缓存的(即值为 `-1`)。 那么就不会是构建缓存的问题了。也不可能是 Cloudflare 的网络层缓存,因为网站使用的是行内 CSS,是以 `