jekyll迁移到Hexo博客架构全过程

为什么要迁移到hexo

什么是Hexo

Hexo 是一个快速、简洁且高效的博客框架(使用NodeJs)。 Hexo 使用 Markdown(或其他标记语言)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。

为什么选择了Hexo

  1. 好看,好看,好看
  2. 其中的归档功能做的很好,支持分组、也支持标签
  3. 很好的集成了网站统计相关的功能

迁移过程

Hexo环境搭建

  1. 首先确保安装了nodejs和git
    因为 Hexo 是基于 nodejs 的,所以需要先安装 nodejs,这里我使用的是 nvm 管理 nodejs 版本,安装好 nvm 后,执行 nvm install nodejs 安装 nodejs。

我安装的是2025年1月最新lts版本的nodejs: v22.12.0

  1. 安装Hexo
1
npm install -g hexo-cli

因为我的nodejs是最新版本,所以我的hexo版本是也是当前最新版本: 7.3.0

创建Hexo博客网站

选择一个你想创建项目代码的位置,执行以下命令创建Hexo博客网站:

1
2
3
4
5
6
7
# 选择合适的nodejs 版本
nvm use v22.12.0
# 创建项目
hexo init my_blod
cd my_blod
# 初始化依赖
npm install

然后我们就得到了一个默认的博客项目my_blog,其中的package.json文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"name": "hexo-site",
"version": "0.0.0",
"private": true,
"scripts": {
"build": "hexo generate",
"clean": "hexo clean",
"deploy": "hexo deploy",
"server": "hexo server"
},
"hexo": {
"version": "7.3.0"
},
"dependencies": {
"hexo": "^7.3.0",
"hexo-generator-archive": "^2.0.0",
"hexo-generator-category": "^2.0.0",
"hexo-generator-index": "^4.0.0",
"hexo-generator-tag": "^2.0.0",
"hexo-renderer-ejs": "^2.0.0",
"hexo-renderer-marked": "^7.0.0",
"hexo-renderer-stylus": "^3.0.1",
"hexo-server": "^3.0.0",
"hexo-theme-fluid": "^1.9.8",
"hexo-theme-landscape": "^1.0.0"
}
}

到了这一步,我们就可以启动最原始版本的项目了:

1
2
3
4
cd my_blod
hexo server
# or
npm run server

然后访问 http://localhost:4000 就可以看到默认的博客了。
hexo默认主题页面
官方给我们创建了一个hello world的博客. 我们可以参考这个来写我们自己的博客了。

常用的hexo命令参考这里

安装我喜欢的主题Fluid

当然这里可以使用任何你喜欢的主题,安装模式大同小异。

  1. 安装Fluid主题的最新版本
1
2
cd my_blod
npm install --save hexo-theme-fluid
  1. 配置主题
    如下修改 Hexo 博客目录中的 _config.yml:
1
2
3
theme: fluid  # 指定主题

language: zh-CN # 指定语言,会影响主题显示的语言,按需修改
  1. 创建【关于页】
    首次使用主题的「关于页」需要手动创建:
1
hexo new page about

创建成功后修改 /source/about/index.md,添加 layout 属性,。

1
2
3
4
5
6
---
title: 标题
layout: about
---

这里写关于页的正文,支持 Markdown, HTML

layout: about 必须存在,并且不能修改成其他值,否则不会显示头像等样式。

fluid主题启动后的博客页面

迁移jekyll博客文章

文章迁移

  1. 把 _posts 文件夹内的所有文件复制到 source/_posts 文件夹
  2. 在 _config.yml 中修改 new_post_name 参数
1
new_post_name: :year-:month-:day-:title.md
  1. 如果不想使用步骤2,也可以把所有的文章的文件名的年月日前缀去掉,也可以(作为轻度洁癖患者,我选的这种方式)。

图片迁移

原先我的所有的图片资源都是在项目的根目录下的 /images 路径下,然后在文章里通过markdown的图片引用方式引用。

迁移到hexo后,只需将images目录 移动到 source 路径下,其他的都不用动,图片就可以自动解析了。

因为hexo 会将source目录下的所有文件都移动到网站的根路径下,所以图片的最终引用地址是一样的。

网站配置修改

通用hexo配置按照如下配置修改 _config.yml 文件:

1
2
3
4
5
# 网站名称
title: 寒澈笔记
subtitle: '一个程序员眼中的世界'
# 网站路径
url: https://www.hancher.top

fluid主题配置特性配置修改如下文件_config.fluid.yml, 会根据主题配置自动选择相应主题的配置。
而且这里的配置优先级最高,会覆盖_config.yml配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# fluid 主题配置

# 网站配置
## 头部
navbar:
# 博客标题
blog_title: 寒澈笔记
# 可以自定义导航栏
# menu:
# - { key: 'home', link: '/', icon: 'iconfont icon-home-fill' }
# - { key: 'tag', link: '/tags/', icon: 'iconfont icon-tags-fill' }
# - { key: 'about', link: '/about/', icon: 'iconfont icon-user-fill', name: '联系我' }

## 底部
footer:
statistics:
enable: true
source: "busuanzi" # 可选 leancloud | busuanzi 根据自己需求选择
pv_format: "总访问量 {} 次" # 显示的文本,{}是数字的占位符(必须包含),下同
uv_format: "总访客数 {} 人"

force_https: false # 强制https

# 内容配置
## 首页
index:
slogan:
enable: true
text: 人生总有一些东西值得回忆

about:
name: "寒澈"
intro: "一名喜欢文史哲的程序员"
icons: # 不要把 icon 注释掉,否则无法覆盖配置
- { class: 'iconfont icon-github-fill', link: 'https://github.com/Hanchers/hanchers.github.io' }
- { class: 'iconfont icon-zhihu-fill', link: 'https://www.zhihu.com/people/bh.zhi' }
- { class: 'iconfont icon-wechat2-fill', qrcode: '/images/about/see-history.jpg' }

## 文章
post:
meta:
author: # 作者,优先根据 front-matter 里 author 字段,其次是 hexo 配置中 author 值
enable: false
date: # 文章日期,优先根据 front-matter 里 date 字段,其次是 md 文件日期
enable: false
format: "dddd, MMMM Do YYYY, h:mm a" # 格式参照 ISO-8601 日期格式化
wordcount: # 字数统计
enable: true
format: "{} 字" # 显示的文本,{}是数字的占位符(必须包含),下同
min2read: # 阅读时间
enable: true
format: "{} 分钟"
views: # 阅读次数
enable: true
source: "busuanzi" # 统计数据来源,可选:leancloud | busuanzi 注意不蒜子会间歇抽风
format: "{} 次"
copyright: # 版权声明
license: 'BY-NC-ND'
update_date: # 来源 front-matter 里 updated 字段
enable: true

github pages 配置修改

我是用的私有项目,然后通过github action的方式来自动编译部署github pages的, 具体可以参考我的历史文章,有记录。

这里要做的是在github 上重新配置hexo环境和 打包脚本。

进入本地项目的 .github/workflows目录下,删除以前的workflow文件,然后新建一个文件,文件名随意,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# ci name
# ci 脚本名称
name: Deploy Hexo site to public github repos

on:
# Runs on pushes targeting the default branch
# 当代码 push 到 main 分支时, 执行该脚本
push:
branches:
- main

# Allows you to run this workflow manually from the Actions tab
# 允许你 手动执行 这个脚本
workflow_dispatch:

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
# GITHUB_TOKEN 的操作权限
permissions:
contents: read
pages: write
id-token: write

# Allow one concurrent deployment
concurrency:
group: "pages"
cancel-in-progress: true

# job 执行任务, 可以有多个, 默认并行运行, 可以通过 needs 关键字来设置依赖的其他 jobs
# step : 任务下的执行步骤, 一个job 会有多个步骤
# 操作: 一个step 下可以执行多个操作, 通常一行脚本为一个操作
jobs:
# Build job
build:
runs-on: ubuntu-latest
steps:
- name: Checkout版本
uses: actions/checkout@v4
# 准备ruby 环境
- name: 使用Node: v22.12.0
uses: actions/setup-node@v4
with:
# Examples: 20, 18.19, >=16.20.2, lts/Iron, lts/Hydrogen, *, latest, current, node
# Ref: https://github.com/actions/setup-node#supported-version-syntax
node-version: "22.12"
- name: 缓存 NPM 依赖
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.OS }}-npm-cache
restore-keys: |
${{ runner.OS }}-npm-cache
- name: 安装npm依赖
run: npm install
- name: 构建博客内容
run: npm run build
- name: 更新博客网站到public目录
uses: actions/upload-pages-artifact@v3
with:
path: ./public

- name: 部署_site到博客网站仓库
working-directory: ./public
run: |
git init
git checkout -b main
git add -A
git -c user.name='hancher' -c user.email='hanchers@outlook.com' commit -m 'update blog'
git push "https://${{github.actor}}:${{secrets.PUB_BLOG}}@github.com/Hanchers/hanchers.github.io" HEAD:main -f -q

如果不是私有项目部署的话,使用官方的配置即可。官方配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
name: Hexo 博客部署

on:
push:
branches:
- main # default branch

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
# If your repository depends on submodule, please see: https://github.com/actions/checkout
submodules: recursive
- name: Use Node.js 20
uses: actions/setup-node@v4
with:
# Examples: 20, 18.19, >=16.20.2, lts/Iron, lts/Hydrogen, *, latest, current, node
# Ref: https://github.com/actions/setup-node#supported-version-syntax
node-version: "20"
- name: Cache NPM dependencies
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.OS }}-npm-cache
restore-keys: |
${{ runner.OS }}-npm-cache
- name: Install Dependencies
run: npm install
- name: Build
run: npm run build
- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./public
deploy:
needs: build
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

然后就可以到 hanchers.github.io 仓库下查看博客内容是否更新成功了。

如果博客内容更新了,就可以安装你的博客地址去访问博客了。

参考


jekyll迁移到Hexo博客架构全过程
https://www.hancher.top/2025/01/07/site-hexo-from-jekyll/
作者
寒澈
发布于
2025年1月7日
更新于
2025年1月9日
许可协议