问题 1:如何让网站自动更新,无需手动刷新
问题描述: 添加新文章或变化后,需要手动刷新才能看到更新
解决方案:
- 添加了 Jekyll Livereload 支持( npm run start:live )
- 配置了 Service Worker 自动更新检测
-
添加了 BrowserSync 作为可选方案 修改文件:
- package.json - 添加新脚本命令
- Gruntfile.js - 配置 BrowserSync
问题 2:还是会有刷新确认按钮
问题描述: 网站检测到更新时,会显示 “Content updated. REFRESH” 按钮,需要手动点击
解决方案:
-
修改 sw-registration.js ,移除手动刷新提示,改为直接自动刷新 修改文件:
-
js/sw-registration.js - 移除 createSnackbar 调用,直接使用 location.reload()
问题 3:网站不停自动更新(无限循环)
问题描述: 打开网站后不停自动刷新
解决方案:
- 移除了自动刷新逻辑
- 改用 Stale-While-Revalidate 策略:先显示缓存,后台更新
-
用户下次访问时自然看到新内容 修改文件:
- sw.js - 移除 UPDATE_FOUND 消息发送
- js/sw-registration.js - 移除自动刷新
问题 4:删除的文章仍在网站上显示
问题描述: 从仓库删除的文章,网站上还能看到
解决方案:
- 优化 Service Worker 策略,HTML 页面优先从网络获取
- 检测到 404 时自动从缓存中删除
-
更新缓存版本,清理旧缓存 修改文件:
- sw.js - 实现智能缓存策略,导航请求优先网络
问题 5:导航栏显示文章标题
问题描述: 导航栏出现了文章标题(”编译实践Lv1. main 函数”)
根本原因:
- 之前误将一篇博客文章放到了 css/ 文件夹
- 那篇文章有 layout: post ,被 Jekyll 当作页面处理
-
导航栏循环显示所有有 title 的页面 解决方案:
- 彻底解决方案: 硬编码导航栏,只显示固定页面(Home、About、Archive)
- 从 git 历史中彻底移除误放的文章
-
清理临时文件 修改文件:
- _includes/nav.html - 硬编码导航链接,移除循环
- 删除了 css/2026-02-15-lv1-main-.md
问题 6:About 和 Archive 页面 404
问题描述: 点击导航栏的 About 和 Archive 跳转到 /about.html 和 /archive.html ,显示 404
原因:
- 博客使用 permalink: pretty 配置
-
正确的 URL 应该是 /about/ 和 /archive/ (带斜杠) 解决方案:
-
修改导航链接,使用正确的 pretty permalink 格式 修改文件:
- _includes/nav.html - 链接改为 /about/ 和 /archive/
📊 最终效果总结
| 功能 | 状态 | 说明 |
|---|---|---|
| 导航栏 | ✅ 正常 | 只显示 Home、About、Archive |
| About 页面 | ✅ 正常 | 访问 /about/ |
| Archive 页面 | ✅ 正常 | 访问 /archive/ |
| Service Worker | ✅ 优化 | Stale-While-Revalidate 策略 |
| 缓存管理 | ✅ 智能 | HTML 优先网络,404 自动清理 |
| 本地开发 | ✅ 支持 | npm run start:live 自动刷新 |
🗂️ 所有修改的文件
- package.json - 添加脚本命令和依赖
- Gruntfile.js - 配置 BrowserSync
- js/sw-registration.js - 移除自动刷新
- sw.js - 智能缓存策略,多次版本更新(v1→v2→v3→v4→v5)
- _config.yml - 更新 exclude 列表
- _includes/nav.html - 硬编码导航,修复链接格式