说到这次更新,jianfei-blog 从 v3.0.0 升级到 v3.1.0,修了几个老毛病,还加了个挺实用的新功能。
第一个坑:本地图片上传后看不见
以前用 upload-md 上传 Markdown 文件时,如果文章里写了  这种本地图片引用,线上是看不到的。得手动复制图片、改路径、再部署三步走。
现在好了:
upload-md 自动识别这些本地图片,按 .md 文件所在目录解析相对路径,把图片搬到 public/images/{postId}-{hash}.{ext},顺便把 Markdown 里的链接也替换了。上传完直接 run 一次 deploy 就行。
到了这个点,base64 图片也能自动处理了
之前 publish-go 发布含 base64 图片的文章时,会把整段 base64 文本塞进 posts.json,结果 JSON 变大、构建变慢,体验拉满。
现在不这样了:
publish-go 在部署前先检查所有文章,不管是 HTML <img> 还是 Markdown 的  格式,统统提取出来变成独立文件,然后再跑 vercel --prod。
回到正题,图片提取逻辑统一了
以前 extract-images 只认 HTML 的 <img src="data:...">,对 Markdown 的 base64 图片完全没反应。
现在改好了:
新增了一个核心模块 scripts/lib/extract-images-core.js,能同时处理两种格式。三个地方都用它——extract-images、publish-go 和 auto-deploy-watcher,再也不用重复写逻辑了。
自动部署守护进程也升级了
以前 watcher 每 5 分钟扫一遍新文章自动部署,但图片还是没提取,导致有些页面加载失败。
现在它会主动干活了:
每次发现新文章,部署前先调用图片提取逻辑,确保内容完整。还加了个启动脚本 ./scripts/start-watcher.sh,支持前台/后台运行,还能自动加载 .env 环境变量,方便多了。
新增功能:可以直接部署 HTML 原始网页!
最爽的是,现在可以部署纯 HTML 页面,甚至是一个小站点(多个 HTML 文件)。
# 部署单个 HTML 文件
jianfei-blog deploy-html ~/Downloads/my-page.html --title "我的网页"
# 部署一个目录(多页站点)
jianfei-blog deploy-html ~/Downloads/my-site/ --title "我的站点"
行为说明:
- 单个 HTML → 放到
public/html-pages/{slug}/index.html - 目录 → 整个拷贝过去,保持 CSS/JS/图片路径不变
- 同时在 Sanity 创建文章记录,列表里显示 🌐 标识
- 自动执行
vercel --prod部署
访问方式:
- 独立页面:
https://sikaoa.com/html-pages/{slug}/ - 博客文章页:
https://sikaoa.com/post/{id}/(带 iframe 预览 + 新窗口打开按钮)
前端适配也跟上了:
- 列表页:标题前加 🌐,摘要显示 “🌐 独立网页 — ...”
- 详情页:标题下方蓝色提示框,有 “在新窗口打开” 按钮
- 正文区域用 iframe 加载原始 HTML,体验几乎原生
文件改动清单
你看这波更新其实没动太多,主要是几个关键模块:
scripts/
lib/extract-images-core.js # 新增:可复用图片提取核心
cmds/extract-images.js # 简化:调用 core
cmds/upload-md.js # 新增:本地图片自动处理
cmds/publish-go.js # 新增:部署前自动提取图片
cmds/deploy-html.js # 新增:HTML 网页部署命令
auto-deploy-watcher.js # 新增:部署前提取图片
start-watcher.sh # 新增:守护进程启动脚本
src/
lib/post-types.ts # PostCardData 增加 source 字段
app/page.tsx # 传递 source
app/search/page.tsx # 传递 source
components/PostCard.tsx # html-deploy 显示 🌐
components/PostContent.tsx # html-deploy iframe + 跳转提示
.kimi/skills/jianfei-blog/SKILL.md # 文档更新至 v3.1.0
升级后的命令速查表
| 命令 | 说明 |
|---|---|
publish <title> [content] | 发布文章到 Sanity |
publish-go <title> [content] | 发布 + 自动提取图片 + 部署 |
upload-md <路径> | 批量/单个 .md 上传(自动处理本地图片) |
deploy-html <file|dir> | 部署 HTML 原始网页 |
delete <id>|--last|--title | 删除文章 |
edit <id> <旧文本> <新文本> | 编辑文章 |
list [--limit N] | 列出文章 |
extract-images | 提取 base64 内嵌图片 |
deploy | 部署到 Vercel |
stats | 博客统计 |