升级了博客
博客最早运行在一套比较老的 Hexo 环境上。后来 Mac、Node.js、Hexo 和各种插件都升级了很多代,旧环境虽然还能勉强运行,但越来越依赖历史版本的软件,维护成本也越来越高。
这次借助 AI 彻底换了底层运行环境、Markdown 渲染、数学公式、代码高亮、CSS 构建和响应式布局等架构。还改进了博客的样式,方便今后产出更系统化的文字内容。
新旧区别
旧版大致是:
Markdown
↓
Hexo 3.9.0
↓
Kramed / 旧版插件
↓
PLN 主题
↓
Stylus / node-sass / 浏览器端 Highlight.js 等旧链路
↓
静态网页新版大致是:
Markdown
↓
Hexo 8.1.2
↓
Marked + CJK 兼容处理
↓
hexo-math / Hexo 内置 Highlight.js
↓
PLN EJS 模板
↓
Dart Sass 编译 SCSS
↓
静态 HTML + CSS + 少量 JavaScript
↓
GitHub Pages最大的区别不是页面看起来完全不同,而是生成网页的链路更简单、更现代,也更容易继续维护。维护的便利,除了架构,还体现在 AI 时代特有的 Checkpoint 文件 AI_CONTEXT.md。每次改动只需提交文件并表示:
这是项目 Checkpoint。请先阅读了解架构和设计约束。
就能再次安全可靠地出发。
Node.js 和 Hexo
旧版最后使用的本地环境是:
Node.js 13.14.0
npm 6.14.4
Hexo 3.9.0
hexo-cli 2.0.0在 Apple Silicon Mac 上,这套环境实际依赖过 x64 / Rosetta。
新版改为:
Node.js 24 LTS
Hexo 8.1.2
hexo-cli 4.3.2新的终端命令
写文章:
cd ~/blog # 进入博客目录
nvm use # 依据 .nvmrc 文件切换到对应的 Node.js 版本
npx hexo new "new post" # 创建新博文 - 链接格式 /2026/10/24/new-post/
# npx 代表调用项目对应版本的 hexo ,和项目依赖严格一致,避免不兼容
#(先运行当前目录中的 hexo ,没有就临时下载对应版本,执行完自动清理)本地预览效果:
cd ~/blog
nvm use
npm run build # package.json 设置了 "build": "hexo clean && hexo generate"
npx hexo s # 启动服务器,在 http://localhost:4000/ 预览博客如果改了 PLN 主题内容,则需要先更新 m.min.css 再 npm run build:
npm run css # package.json 设置了 "css": "sass ... .../css/m.min.css"
npm run build
npx hexo s提交源码
如果只是新增或修改文章:
cd ~/blog
git status
git add source
git commit -m "Update blog posts"
git push origin master修改 PLN 后要 commit 两次,push 两次:
第一次,先提交 PLN:
cd ~/blog/themes/pln git status git add -A git commit -m "Update PLN theme" git push origin HEAD第二次,回到 blog 提交:
cd ~/blog git add themes/pln git commit -m "Update PLN theme revision" git push origin master
必须先 push PLN,再 push blog 的 submodule pointer。
更新网站 - GitHub Pages
博客源码仓库和最终网页不是同一个东西。日常发布可以理解为两步:
Git push
→ 保存博客源码
Hexo deploy
→ 更新 GitHub Pages 网页Hexo 会把生成后的静态网站(各种 .html 文件)部署到:
git@github.com:chpwang/chpwang.github.io.git发布:
cd ~/blog
nvm use # 依据 .nvmrc 文件切换到对应的 Node.js 版本
npm run build # package.json 设置了 "build": "hexo clean && hexo generate"
npx hexo d # 部署静态网页到 GitHub Pages发布后打开博客链接检查最终线上效果。
新 Mac 从零恢复环境
打开终端先安装 Command Line Tools(Git 等工具):
xcode-select --install安装 Hombrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"须完成安装器末尾打印的 Next steps 配置,使 brew 可以使用。Apple Silicon Mac 通常执行以下两行;Intel Mac 请按安装器提示改为 /usr/local/bin/brew:
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"检查:
brew --version
git --version安装 iTerm2、Fish Shell、GitHub CLI(仍在 zsh)
brew install fish gh
brew install --cask iterm2将 Fish 设为登录 shell(需输登录密码):
FISH_PATH="$(brew --prefix)/bin/fish"
grep -Fxq "$FISH_PATH" /etc/shells || echo "$FISH_PATH" | sudo tee -a /etc/shells
chsh -s "$FISH_PATH"关闭旧 Terminal,打开 iTerm2,确认进入 fish:
echo $version添加路径,让 fish 始终能找到 Homebrew:
# Intel Mac 则为 `/usr/local/bin /usr/local/sbin`
fish_add_path /opt/homebrew/bin /opt/homebrew/sbin在 fish 中安装 nvm.fish(nvm 命令)
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source; and fisher install jorgebucaran/fisher
fisher install jorgebucaran/nvm.fish此时先不要随意安装最新 Node。项目根目录的 .nvmrc 有记录;等克隆完成后在项目目录使用 nvm install,会自动安装正确的 Node 主版本。
连接 GitHub,并配置 Git 作者身份
gh auth login --git-protocol ssh --web根据终端提示,在浏览器中登录有权访问 Blog、PLN、Pages 仓库的 GitHub 账户,并允许 gh 创建/上传 SSH 公钥(如出现提示)。无需手工复制 SSH key 到网页。然后检查:
gh auth status从旧电脑读取原来的作者姓名和邮箱(git config --global user.name、git config --global user.email),在新电脑设置相同信息:
git config --global user.name "你的 Git 提交姓名"
git config --global user.email "你的 Git 提交邮箱"克隆 Blog,并取回 PLN 子模块:
cd ~ # 切换到目标目录,即希望 blog 文件夹放的位置
git clone --recurse-submodules git@github.com:chpwang/blog.git blog
cd ~/blog--recurse-submodules 会在克隆 Blog 的同时取回 Blog 当前提交所指向的 PLN 版本。不要单独把最新版 PLN master 强行覆盖进去。
确认:
git status -sb
git submodule status
git -C themes/pln status -sb子模块默认可能显示 HEAD detached at ...,这是 Git 通过精确 commit 还原子模块时的正常情况。仅为了写文章和发布,无须将 PLN 强行切回 master;以后真的要修改 PLN 时,先检查其分支和指针再切换。
如果首次克隆因子模块网络问题未成功,可在 Blog 根目录执行:
git submodule update --init --recursive安装正确 Node、依赖,生成网站并本地预览
cd ~/blog
nvm install # 读取 .nvmrc(Node 24)并安装/启用
nvm use # 依据 .nvmrc 文件切换到对应的 Node.js 版本
npm ci # 根据 package-lock.json 精确安装依赖(Continuous Integration)
npm run build # hexo clean + hexo generate
npx hexo s # 本地预览;按 Ctrl+C 结束在浏览器访问 http://localhost:4000/ 。
验证部署配置并发布:
npx hexo deploy # 发布更新博客网页部署成功后访问博客网站。如果 Safari 与 Chrome 的行为不一致,先检查 CSS/JS 缓存,不要立即重做主题。
总结
单台电脑上完整的博文流程如下
cd ~/blog # 进入博客文件夹目录
nvm use # 切到对应的 Node.js
# 多设备可先同步进度再开始(fast-forward only)
git pull --ff-only
npx hexo new "new post" # 创建新博文
## 对 source/_posts/new-post.md 文件进行各种编辑 ##
npm run build # 生成静态网页 - "build": "hexo clean && hexo generate"
npx hexo s # 本地预览效果
# 保存 - save & push
git add source/_posts
git commit -m "Update blog posts"
git push origin master
## 若更改了主题样式 pln 则要两个仓库依次 commit/push
# 第一次 commit/push
cd ~/blog/themes/pln
git add -A
git commit -m "Update PLN theme"
git push origin HEAD
# 第二次 commit/push
cd ~/blog
git add themes/pln
git commit -m "Update PLN theme revision"
git push origin master
npx hexo d # 部署静态网页到 GitHub Pages其他延伸阅读:
常用的 Markdown 语法、排版和技巧
常用的 LaTex 语法
打赏