Hexo 简介
Hexo 是什么
Hexo 是一个快速、简洁且强大的静态博客框架,基于 Node.js 驱动。你只需使用 Markdown 写作,Hexo 就会在几秒内生成纯静态的 HTML 页面,无需数据库、无需 PHP 等后端环境,任何静态托管(GitHub Pages、Vercel、Nginx、对象存储等)都能直接承载。
相比动态博客系统,Hexo 的优势:
- 快:静态页面,无需服务端渲染,CDN 加速友好
- 简单:Markdown 写作,Git 版本管理,一条命令部署
- 强大:海量插件与主题生态(本教程即基于深度定制的 matery 主题)
- 安全:无数据库、无运行时漏洞面,天然抗攻击
本博客(夜法之书)即基于 Hexo 8.1.2 + matery 主题构建,生产环境由 Vercel 托管。
环境要求
| 组件 | 版本要求 | 说明 |
|---|---|---|
| Node.js | >= 20 | Hexo 8.x 运行环境(本站开发使用 LTS 版本;package.json 未声明 engines,实际运行要求 Node >= 20) |
| npm | 随 Node 附带(项目锁定 npm@9) | 随 Node.js 安装,用于安装 Hexo 与插件 |
| Git | 任意现代版本 | 拉取主题、部署到 Git 托管平台 |
验证环境
输出:两行版本号,第二行末带 npm 自带的更新提示(有新版时才出现)。只要 Node 主版本 ≥ 20、npm 主版本为 9,环境即合格;报 command not found 说明对应工具没装或不在 PATH。
v20.19.4
9.9.4对应命令:
node -v # v20.x 之类
npm -v # 9.x(项目 packageManager 锁定 npm@9)常用命令
| 命令 | 作用 |
|---|---|
hexo init [folder] | 新建站点。等价于克隆 hexo-starter 并安装依赖 |
hexo new post <标题> | 新建文章到 source/_posts/(标题含空格需加引号) |
hexo new page <名称> | 新建独立页面(如 about、tags) |
hexo new draft <标题> | 新建草稿到 source/_drafts/ |
hexo publish <标题> | 将草稿发布为正式文章 |
hexo generate | 生成静态文件到 public/(-w 监视改动,-d 生成后部署) |
hexo server | 启动本地预览,默认 http://localhost:4000/(-p 指定端口) |
hexo deploy | 部署网站(推送至配置的 Git 仓库,-g 部署前先生成) |
hexo clean | 清除缓存(db.json)与生成目录(public),改配置/插件后建议执行 |
hexo --safe | 安全模式,不加载插件与脚本,排查插件冲突时使用 |
hexo server --draft | 预览时显示草稿 |
hexo version | 查看 Hexo 版本 |
每条命令能看到什么
下面把上表逐条展开成「输出 → 对应命令」:先看终端/文件系统给出的反馈,再照抄命令。
① 新建站点
输出:终端依次打印 INFO Cloning hexo-starter ...、INFO Install dependencies,结束时提示 INFO Start blogging with Hexo!;当前目录多出 my-blog/,里面有 _config.yml、package.json、source/、themes/。
对应命令:
hexo init my-blog
cd my-blog
npm install② 新建文章
输出:终端输出 INFO Created: ~/my-blog/source/_posts/文章标题.md;打开该文件能看到 title / date / tags 等 front-matter 已按 scaffolds/post.md 预填。
对应命令:
hexo new post "文章标题"③ 新建独立页面
输出:终端输出 INFO Created: ~/my-blog/source/about/index.md,文件里只有 title 和 date(layout 需要手工补)。
对应命令:
hexo new page about④ 新建草稿
输出:终端输出 INFO Created: ~/my-blog/source/_drafts/未完成的想法.md;默认不参与生成,首页看不到它。
对应命令:
hexo new draft "未完成的想法"⑤ 发布草稿
输出:终端输出 INFO Published: ...source/_posts/未完成的想法.md;文件从 _drafts/ 移到 _posts/,date 被写入当前时间。
对应命令:
hexo publish "未完成的想法"⑥ 生成静态站点
输出:终端逐条列出 INFO Generated: index.html、INFO Generated: posts/xxx/index.html 等,最后一行 INFO Files generated in 3.2s(耗时因机器而异);public/ 目录出现完整 HTML 站点。
对应命令:
hexo generate⑦ 本地预览
输出:终端打印 Hexo is running at http://localhost:4000/ . Press Ctrl+C to stop.;浏览器打开该地址能看到首页。改文件后浏览器自动刷新。
对应命令:
hexo server⑧ 部署
输出:终端输出 INFO Deploying: git、INFO Clearing .deploy_git folder...,末尾 INFO Deploy done: git;对应托管平台开始构建。
对应命令:
hexo deploy⑨ 清理缓存
输出:终端输出 INFO Deleted database.、INFO Deleted public folder.;db.json 与 public/ 消失,"改了不生效"的问题多由此解决。
对应命令:
hexo clean⑩ 安全模式
输出:站点仍能启动,但主题脚本、自定义 tag 插件全部不加载(页面明显"素"),用于判断故障是否来自插件。
对应命令:
hexo --safe server⑪ 预览草稿
输出:与普通预览一样给出 http://localhost:4000/,区别是首页列表里出现了 _drafts/ 中的文章。
对应命令:
hexo server --draft⑫ 查看版本
输出:一行 hexo: 8.1.2 加 os、node、npm 等环境信息,报问题时可整段贴出。
对应命令:
hexo version常用组合(本项目 package.json 脚本)
输出:npm run build 结束时 public/ 就绪并生成 pagefind 搜索索引;npm run clean 清空产物;npm run server 起在 http://localhost:4000/;npm run deploy 推送到部署仓库。
对应命令:
npm run build # hexo generate(另含 pagefind 搜索索引)
npm run clean # hexo clean
npm run server # hexo server
npm run deploy # hexo deploy工作流程
写作(Markdown) → 生成(hexo generate) → 部署(hexo deploy)写作:
hexo new post "文章标题"创建文章,用 Markdown 编辑source/_posts/下的文件输出:
source/_posts/文章标题.md出现,front-matter 已填好。对应命令:hexo new post "文章标题"预览:
hexo server在本地检查效果(默认localhost:4000)输出:浏览器里看到与线上同构的页面,保存文件即热更新。对应命令:
hexo server生成:
hexo generate将文章渲染为public/静态文件输出:
public/index.html与public/posts/<abbrlink>/index.html等产物。对应命令:hexo generate部署:
hexo deploy推送至 Git 仓库;或推到 GitHub 由 Vercel 等平台自动构建输出:终端
INFO Deploy done: git,托管平台开始构建。对应命令:hexo deploy
提示:修改
_config.yml或主题配置后,务必先hexo clean再hexo generate,否则可能命中缓存导致改动不生效。