☰
用Hexo搭建个人技术博客:从环境配置到面试展示的完整指南
2026/10/14 1:12:16 网站建设 项目流程

“面试加分”这四个字,在技术圈里往往自带争议。有人觉得这就是培训机构的话术噱头,也有人真真切切靠着博客拿到了入场券。作为一个既面过别人、也被别人面过的从业者,我负责任地说:个人技术博客本身不会给你加分,但“持续输出的技术积累”和“能跑通全流程的动手能力”会。Hexo恰好是把这个能力外化展示的最低成本方案——它不需要买服务器、不需要写后端、不需要维护数据库,只要你会敲命令行,半小时就能把一套完整的个人博客跑起来,剩下的事情就是往里面填真正值钱的内容。

这篇东西适合三类人:一是临近秋招春招、想给简历加一个真实可访问链接的在校同学;二是工作了两三年、想开始沉淀技术输出但一直没动手的后端或测试同学;三是纯粹想拥有一个不依赖任何平台的内容阵地、并愿意折腾点前端的小白。我会把从安装环境到部署上线的完整链路拆开讲,顺便把我在实际折腾中踩过的坑、以及在面试现场被问到的细节一并交代清楚。

1. 为什么选Hexo做个人博客

1.1 静态博客方案对比

先搞清楚一个概念:Hexo是一个基于Node.js的静态站点生成器,它的核心工作方式是把Markdown写的内容、配上主题模板,渲染成一套纯静态的HTML/CSS/JS文件。这套文件随便丢到任何静态托管服务上就能访问。

市面上静态博客工具不少,主流的是Hexo、Hugo、Jekyll这三家,加上传统的WordPress这类动态方案。我做了个有代表性的对比:

方案运行环境上手难度主题生态适合人群
HexoNode.js中低丰富,中文社区活跃前端、全栈、学生
HugoGo中较丰富追求极速构建的资深玩家
JekyllRuby中丰富配合GitHub Pages原生场景
WordPressPHP + MySQL低极丰富不想碰代码的内容创作者

如果你把“面试加分”当成目标,Hexo有一个其他方案比不了的优势:你的简历上可以写“熟悉Node.js生态、Git工作流、静态站点构建与自动化部署流程”,这些都是面试官听得懂、愿意追问的东西。Hugo虽然构建速度更快,但Go语言环境对求职场景的附加价值有限;Jekyll需要Ruby环境,在Windows上折腾折腾就够喝一壶的。身边某高校的同学用Jekyll卡在gem安装上,三天没跑起来,最后含泪换了Hexo,十分钟跑通——这类故事我听太多了。

1.2 Hexo的核心优势与适用边界

Hexo能在中文技术圈流行这么多年,原因很朴素:它的学习曲线缓、依赖链条清晰、出问题的解法满网都是。从技术角度拆,它的核心价值有三条:

一是生成速度快。百篇量级的文章,hexo generate跑一遍也就几秒,本地预览、内容检查、重新生成,整个编辑循环非常顺滑,不会打断写作心流。

二是部署足够简单。产物就是一堆静态文件,扔到GitHub Pages、Vercel或者任意对象存储都能跑,零服务器成本、零安全维护压力。这对于短期搭建、长期用于面试展示的场景来说,性价比拉满。

三是主题和插件体系完整。从极简到花哨都有现成方案,评论、搜索、统计、SEO、数学公式这些功能都有插件覆盖,不需要自己造轮子。

但也要说清楚边界。Hexo本质是“个人内容发布工具”,不是“内容管理系统”。如果你后续想做多作者协作、动态交互、在线编辑这类事情,它不是合适底座。另外,如果文章量到了一两千篇且平时对构建速度极度敏感,Hugo会是更理性的选择。我的建议是:以面试展示和习惯养成为目标选Hexo完全够用,不要等万事俱备才动手。

2. 环境准备与项目初始化

2.1 需要装什么:Node.js与Git

Hexo跑在Node.js上,所以环境准备主要就两件事:Node.js和Git。

Node.js的安装我推荐用版本管理工具,而不是直接去官网下安装包。Windows上用nvm-windows,macOS/Linux上用nvm。为什么要多这一步?因为不同插件对Node版本有兼容性要求,如果以后某天Hexo报奇奇怪怪的依赖错误,用nvm切换版本是最快的试错手段。建议装当前LTS版本,太新的版本偶尔会有原生模块编译兼容问题。

# Windows安装nvm-windows后,或macOS/Linux使用nvm nvm install --lts nvm use --lts node -v # 验证Node版本 npm -v # npm会随Node一起安装

Git的安装相对无脑,Windows下装Git for Windows即可,安装过程保持默认选项,唯一建议调整的是换行符转换选“Checkout as is, commit as-is”,避免后续hexo部署时脚本在Windows和Linux之间出现LF/CRLF问题。

装好后顺手配置身份信息,这一步虽然初期用不到,但后面部署和提交代码时Git会校验:

git config --global user.name "your-name" git config --global user.email "your-email@example.com"

2.2 用命令行初始化博客

环境就绪后,先全局安装Hexo的脚手架工具:

npm install -g hexo-cli hexo -v

hexo -v能正常打印版本号,就说明脚手架装好了。接下来初始化一个项目。项目目录名可以随意,我的习惯是用blog或my-blog这种一眼能认出用途的名字:

hexo init my-blog cd my-blog npm install

hexo init会拉取Hexo的基础模板,npm install安装项目依赖,这一步在国内网络环境下可能稍慢,耐心等就好。装完先起个本地预览验证一下:

hexo clean && hexo generate && hexo server

浏览器访问http://localhost:4000,看到默认的Hexo首页就说明整个链路通了。这一步成功后,你的博客骨架已经是可运行状态,后面要做的只是让它长成你自己的样子。

2.3 初始化后的目录结构与核心文件

很多教程直接让你改配置,但我建议先花五分钟把目录结构看明白,后面所有排错都离不开它:

my-blog/ ├── _config.yml # 站点全局配置 ├── package.json # 项目依赖与脚本 ├── scaffolds/ # 文章模板 ├── source/ # 源文件目录(Markdown都放这里) │ ├── _posts/ # 文章存放目录 │ └── about/ # 独立页面示例 ├── themes/ # 主题目录 ├── public/ # 生成的静态文件(hexo g后出现) └── node_modules/ # 依赖包

理解这套结构的核心在于:你在source/_posts里写Markdown,hexo generate把它们渲染成public目录下的HTML,部署时上传的就是public目录。弄清楚这条数据流,后面不管是图片路径问题、CNAME丢失问题还是自定义页面问题,都能顺着这条链追到根源。

3. 核心配置与主题定制

3.1 站点配置:改好根目录_config.yml

博客真正个性化首先从根目录的_config.yml开始。这是全站的心脏文件,用编辑器打开后重点改这几处:

# 站点信息 title: 我的技术博客 subtitle: 记录代码与思考 description: 前端开发、面试笔记与项目复盘 author: 某开发者 language: zh-CN timezone: Asia/Shanghai # 网址 url: https://yourname.github.io # 部署配置(第4章细讲) deploy: type: git repo: https://github.com/yourname/yourname.github.io.git branch: main

有几个字段值得多说一句。author字段不光显示在页面,很多主题还把它塞进页脚、文章元信息和RSS订阅源里,所以最好直接写你对外统一的昵称,而不是真名全拼这种不好读的串。language必须设成zh-CN,否则默认英文主题会暴露一堆英文文案,观感很业余。timezone不设置也能跑,但文章日期会用服务器时区渲染,在国内访问场景下有时差,建议直接写Asia/Shanghai。

还有一个容易忽略但面试会被问到的点:url必须和最终访问域名一致。比如你部署在GitHub Pages,最终地址是https://yourname.github.io,那url就要写成这个完整地址,否则站内链接和SEO元数据会不一致,审核博客的人点开你简历上的链接,会发现站内跳转全是localhost或者旧域名,非常掉价。

3.2 主题选型与安装:我推荐NexT的原因

主题是博客的脸面。Hexo生态里主题很多,我首推NexT,不是因为它最花哨,而是因为它文档全、坑少、配置项清晰,对你把精力留在写内容这件事上最有帮助。

安装NexT有两种方式。一种是直接npm安装(新版本支持):

npm install hexo-theme-next

另一种是git clone主题源码到themes目录,适合想自己改动主题代码的场景:

git clone https://github.com/next-theme/hexo-theme-next.git themes/next

装好后在根目录_config.yml里把主题切换过去:

theme: next

然后hexo clean && hexo g && hexo s刷新页面,就能看到NexT的默认外观了。

NexT有四种外观方案(Scheme),在themes/next/_config.yml里改scheme字段可以切换:Muse、Mist、Pisces、Gemini。我的选择是Pisces,侧边栏和正文分区清晰、目录导航层次分明,特别适合技术博客这种长文多的场景。

作为参考,我整理的NexT常用配置项如下:

配置项位置作用
schemeNexT主题配置切换外观方案
menuNexT主题配置控制首页/归档/标签/关于等导航入口
avatarNexT主题配置设置侧边栏头像
socialNexT主题配置配置GitHub等社交链接
tocNexT主题配置文章目录深度与是否展开
post_metaNexT主题配置控制文章页显示哪些元信息

侧边栏头像、社交链接这些配置项不是写在根目录_config.yml里,而是写在themes/next/_config.yml里。这个双配置文件体系是新手最常搞混的地方:站点信息改根的,主题样式改主题目录里的。

3.3 文章写作:命令、front-matter与图片路径

主题搞定之后,博客的使用主流程就是写作了。创建新文章用:

hexo new "我的第一篇博客"

这条命令会在source/_posts下生成一个Markdown文件,文件头部有一段叫front-matter的元信息:

--- title: 我的第一篇博客 date: 2025-01-15 10:00:00 tags: - Hexo categories: - 技术教程 ---

front-matter的title决定页面标题和URL,tags和categories生成归档页的分类索引。这里有个很多新手搞不明白的点:tags支持多值、categories在Hexo里是层级结构,categories: [技术教程, 前端]会被解析成“技术教程/前端”这种父子层级,写的时候要注意。

写作时的另一个高频痛点是图片。Hexo默认情况下,正文里的图片引用需要放到source/images目录,然后写绝对路径:

![示例图片](/images/example.png)

这种方式在文章少的时候还行,文章一多、图片一乱就很容易找不到对应文件。我个人的做法是直接在根目录配置里开启文章资源文件夹:

post_asset_folder: true

开启后,每次hexo new会自动生成一个和文章同名的目录,图就丢在这个目录里,正文引用时使用相对路径即可,整篇文章连同图片形成一个自包含的单元。这个习惯上了年纪的内容平台根本做不到,但它确实让博客整理成本低了很多,也方便以后迁移。

4. 部署上线:免费托管与面试展示

4.1 部署到GitHub Pages的完整流程

博客写好了,不部署等于零。对求职场景来说,一个能用浏览器直接访问的公网地址,才是把博客价值落到简历上的前提。最省钱的方案是GitHub Pages,免费、稳定、无需备案,而且GitHub本身是技术面试的“浏览窗口”,一举两得。

部署链路分为三步。第一步,在GitHub上新建一个仓库,仓库名必须严格遵守你的用户名.github.io这个命名规则,这是GitHub Pages的硬性要求,例如用户名是zhang-san,仓库名就得是zhang-san.github.io。

第二步,安装Git部署插件:

npm install hexo-deployer-git --save

第三步,回到根目录_config.yml,把第3节里预留的deploy配置项填完整:

deploy: type: git repo: https://github.com/zhang-san/zhang-san.github.io.git branch: main

然后执行:

hexo clean && hexo generate && hexo deploy

这里有个权限细节:hexo deploy本质上是git push,如果你的仓库是私有的,或者Git没有配置好认证方式,会弹出账号密码验证。现在GitHub已经不支持密码直连,建议提前配置SSH key或者在系统凭据管理器里保存好access token。我见过不少同学在deploy这一步反复失败,绝大多数都不是Hexo的问题,而是Git认证没配对。

部署完成后,访问https://zhang-san.github.io就能看到你的博客了。这个地址,就是往简历上放的加分链接。

4.2 自定义域名与CNAME的坑

GitHub Pages默认域名是用户名.github.io。如果你有自己的域名,比如zhangsan.dev或者blog.zhangsan.com,也可以绑定过来,在面试场景里,一个独立域名比默认域名看起来专业得多,而且某种程度上也说明你做过完整的线上运营闭环。

绑定域名有两件事要做:一是到你的域名服务商那里加一条CNAME记录,指向用户名.github.io;二是在博客的source目录下新建一个名为CNAME的文件,里面只写一行内容:

blog.zhangsan.com

第二件事有个著名的坑:千万不要把CNAME文件放在public目录里,而要放在source目录下面。因为public是每次hexo generate都会清空重建的目录,你放进去的CNAME在下一次生成时就没了。放在source目录下,它会被原样拷贝到生成的public目录里,这样无论部署多少次,域名绑定关系都能保住。这个坑我亲眼见过有人踩了三次还没反应过来。

自定义域名对应的HTTPS证书,GitHub Pages会自动通过Let‘s Encrypt签发放置,不需要你手动处理,等几分钟到几小时生效,Chrome地址栏出现小锁图标就是配好了。

4.3 面试场景里怎么用这个博客

部署上线只是起点,让它在面试里发挥价值才是目的。我的建议是按“三级递进”来使用这个博客:

第一级,简历上放链接。位置放在教育经历下方或技能清单附近,一句话说明:“个人技术博客:blog.zhangsan.com(持续更新X篇技术笔记)”。面试官大概率会顺手点开。一个打开速度快、结构清晰、有真实内容产出的站点,比简历上写十行“精通XXX”都管用。

第二级,把博客精选内容作为项目经历的一部分。比如你写了Node.js相关的博客,面试官问你的项目细节时,你可以说“这部分我踩过坑,总结过一篇文章”,然后把链接发给对方。这种做法的妙处在于:它证明了你的项目经历不是背的,而是真的沉淀过。面试官事后回看你的文章,能确认你有技术思考和书面表达的双重能力。

第三级,GitHub上把博客仓库置顶,同时把发布文章、更新主题、修复bug这些提交记录展示出来。面试官看你简历时如果顺手打开你的GitHub主页,一个活跃维护的Hexo仓库会让你的整体技术档案更加可信。

5. 常见问题与排查技巧实录

搭博客这件事,大部分时间不是在写文章,而是在排错。我把实操中遇到过的典型问题整理成了一份速查表,按我的经验标好了优先级:

现象根本原因解法
hexo s后浏览器打不开4000端口端口被占用hexo s -p 4001换端口预览
hexo d提示“Deployer not found: git”没有安装部署插件npm install hexo-deployer-git --save
修改主题不生效没有清理缓存hexo clean && hexo g && hexo s
部署后自定义域名失效CNAME被清掉把CNAME文件放到source目录下
文章里的数学公式渲染乱主题默认没开数学引擎在NexT配置里开启KaTeX并引入对应资源
本地预览正常、部署后图片全挂图片路径写的是本地绝对路径改用/images/xxx或开启post_asset_folder
Node版本升级后npm install报错依赖与Node版本不兼容用nvm切换LTS版本后重装依赖

这里面最值得单独说透的一个问题是“本地好好的,部署到线上就坏”。这个现象的本质是public目录内容与本地环境绑定过深,或者资源路径写成了localhost。排查逻辑很简单:在public目录里搜索一下localhost或者检查图片的src引用路径,如果是本地绝对路径,改成站点根路径或者相对路径,重新生成部署就行。

另一个高频问题DEBUG技巧是“caches的魔法”。Hexo会把渲染结果缓存起来,改了主题配置或文章却不生效时,有90%的概率是旧缓存捣鬼。记住一条肌肉记忆:在任何hexo g或hexo d之前先hexo clean。我在很长一段时间里坚持“clean策”,基本没有遇到“改了个寂寞”的情况。

6. 别让博客停留在“能访问”

6.1 面试加分最重要的是内容规划

博客上线后最大的诱惑是陷入折腾主题、换插件、改样式的循环。我必须泼一盆冷水:面试官不会因为你博客好看就给你加分,他们看重的是内容质量和技术深度。

基于我观察到的成功案例,内容规划有几个方向值得优先考虑:

一是面试准备型的系列文章。比如“前端面试中的X类问题总结”“算法刷题笔记”“Node中间件原理笔记”。这类内容直接对应面试场景,也最容易让面试官产生共鸣。

二是项目复盘型文章。把做过的一个课程设计、竞赛项目或者工作模块拆开写:架构设计、技术选型、踩过的坑、优化效果。这类文章能证明你不是“会写两行代码”,而是“有工程化思维”。

三是最容易被忽略的:错误记录型文章。把一次环境配了三天的经历写下来,把报错信息、排查过程、最终解决方式完整记录。这种文章技术门槛不高,但信息密度极高,而且是网上很难搜到完整答案的问题,别人搜到你的文章时,这种长尾流量非常可观。

我给某高校一个同学的建议是:第一周先写五篇“环境搭建+踩坑记录”,第二周写两篇项目复盘,第三周开始写面试题总结。三周后他再来找我时,博客已经有几十次搜索访问和两条评论了。这种快速的反馈循环,是坚持更新的最佳燃料。

6.2 面试现场怎么讲你的博客

最怕的场面是面试官问“你的技术博客主要写了什么”,候选人支支吾吾说“就是一些学习笔记”。这个回答等于把自己三个星期的努力归零。

我建议用“技术栈+内容主题+量化产出”的三段式回答。举个例子,你可以这么说:

“我用Hexo这套Node.js的静态站点生成器搭了个人博客,部署在GitHub Pages上,用了NexT主题做了定制。现在有20多篇文章,主要分三类:一类是技术踩坑记录,一类是前端面试题总结,一类是项目复盘。每篇都会配可运行的代码示例。这套博客本身也是我熟悉Git工作流、命令行和自动化部署的实践载体。”

这段话每一个点都在“钓鱼”:面试官大概率会追问“GitHub Actions自动部署怎么做”“为什么不用Hugo”“项目复盘了你哪个项目”。只要他问了,你就有机会把话题引向自己准备充分的技术领域。这比被动等待提问不知道高到哪里去了。

6.3 从博客到作品集:可以继续做的扩展

博客稳定运行之后,还有几个低成本高回报的扩展方向,能进一步放大面试价值:

一是接入GitHub Actions实现自动部署。思路是:本地写完文章push到GitHub仓库,触发Actions自动执行hexo clean && hexo generate && hexo deploy,把静态文件推到gh-pages分支或者部署到Pages服务。这样你写博客的流程简化成“写完push就行”,这本身又是一个可以写进简历的自动化实践案例。

二是接入评论系统。Hexo的静态特性决定了它没有动态的评论后端,常用的方案是Giscus(基于GitHub Discussions)、Valine、或Waline。一个小技巧是:评论数据挂在GitHub上,面试官留言提问也变成了你GitHub的互动记录,看起来更活跃。

三是给博客加统计和分析。接入站点统计平台,通过PV、UV、搜索词来源这些数据反推读者在看什么,用数据指导后续写什么,这又成了一个数据驱动的内容运营案例。

四是做简历页和项目展示页。除了博客正文,用Hexo的独立页面功能做一个“关于我”页面,放上简历下载链接、项目Github链接和核心技能清单,让博客本身就成为一个轻量作品集。

我在实际使用中体会最深的一件事:搭建博客的技术占20%,剩下80%都是内容持续性和自我管理。如果你能坚持每个月稳定产出几篇文章,而不是三天打鱼两天晒网,单是“持续输出”这一项能力,在面试官眼里的价值就远超博客本身。所以别纠结主题够不够好看、配置够不够完美,先老老实实写三篇文章发布出去。等你有了第一个陌生访客、第一条陌生人评论,你就会明白这个博客为什么值得搭——它不只是简历上的链接,更是一面记录你如何成长的镜子。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询