最近在搭建自己的技术博客,选择了轻量高效的Hexo框架。由于网络环境不稳定,过程中遇到了一些小插曲,这里记录下完整的搭建步骤,包括包管理器选择、进程管理、主题安装等,希望能给同样在折腾的朋友一些参考。
1. 网络环境准备(可选)
如果你所在地区访问GitHub或npm源速度较慢,可以考虑使用Clash等代理工具。这里推荐一个方便的Linux一键安装脚本:
1 | # 来自 https://github.com/nelvko/clash-for-linux-install |
安装后配置好代理,后续的npm/pnpm下载速度会快很多。
2. 包管理器:npm vs pnpm
Node.js默认的包管理器是npm,但近年来pnpm因其磁盘空间高效、安装速度快、严格依赖隔离等优点越来越受欢迎。两者的主要区别:
- npm:传统的包管理器,每个项目都会复制一份依赖,占用空间较大。
- pnpm:使用硬链接和符号链接将依赖存储在全局store中,项目间共享相同版本的依赖,节省磁盘空间,同时安装速度更快。
由于pnpm对Hexo生态支持良好,我决定使用pnpm。
首先通过npm全局安装pnpm:
1 | npm install pnpm -g |
3. 安装Hexo并初始化博客
使用pnpm安装Hexo命令行工具:
1 | pnpm install hexo-cli -g |
然后初始化一个博客项目(以blog为目录名):
1 | hexo init blog |
此时可以启动内置服务器预览默认主题:
1 | hexo server |
访问http://localhost:4000即可看到初始博客。
4. 使用PM2管理Hexo进程
Hexo自带的服务器适合开发调试,但在生产环境中我们通常希望博客持续运行,并且能自动重启。PM2是一个优秀的Node.js进程管理工具,可以用它来管理Hexo进程。
安装PM2(全局安装):
1 | pnpm install pm2 -g |
spawn vs exec:如何启动Hexo?
在Node.js中启动子进程有两种常用方式:exec和spawn。区别在于:
exec:创建一个shell,执行命令,将结果缓存到回调中,适合获取少量输出。spawn:直接创建子进程,通过流式处理stdout/stderr,适合长时间运行的进程(如服务器)。
由于Hexo server是一个常驻进程,使用spawn更合适。下面是一个简单的启动脚本blog.js:
1 | const { spawn } = require('child_process') |
将上述代码保存为blog.js,然后用PM2启动:
1 | # 启动进程 |
这样,Hexo博客就以守护进程方式运行在后台了。
5. 解决中文字体显示问题
如果你的博客包含中文内容,或者使用了某些依赖中文字体的主题,可能会遇到字体缺失导致显示异常。在Ubuntu/Debian系统上,可以安装完整的中文字体包:
1 | sudo apt update |
安装后重启Hexo服务,中文显示就正常了。
6. 选择一款漂亮的主题:博丽灵梦风格
Hexo拥有丰富的主题生态,我选择了一款以东方Project角色“博丽灵梦”为主题的开源主题——hexo-theme-reimu。它简洁优雅,适合技术博客。
在博客根目录下克隆主题:
1 | git clone https://github.com/D-Sketon/hexo-theme-reimu.git themes/reimu |
然后修改_config.yml,将theme设置为reimu。
7. 安装必要的插件
为了支持主题功能和Markdown渲染优化,需要安装一些额外的包:
1 | # 工具库 |
8. 生成静态文件
每次修改文章或主题配置后,需要重新生成静态文件:
1 | hexo clean # 清除缓存 |
生成完成后,可以通过hexo server预览,或者直接部署到服务器(配合PM2保持运行)。
结语
至此,一个基于Hexo、使用pnpm管理依赖、PM2守护进程、并配备了灵梦主题的博客就搭建完成了。整个过程虽然遇到了一些网络和字体问题,但都顺利解决。希望这篇记录对你有帮助,欢迎交流讨论!
说些什么吧!