前期准备

环境:CentOS8.1

配置:nodejs、cnpm、git、hexo

注意:配置时需要root权限,所以登录root用户

安装nodejs

安装:

1
[root@localhost ~]# yum -y install nodejs

测试安装是否成功:

1
2
3
4
5
6
[root@localhost ~]# node -v
v10.21.0
[root@localhost ~]# npm -v
6.14.4

# 显示版本即可

安装cnpm

安装:

1
[root@localhost ~]# npm install -g cnpm --registry=https://registry.npm.taobao.org

测试安装是否成功:

1
2
3
4
5
6
7
8
9
[root@localhost ~]# cnpm -v
cnpm@6.1.1 (/usr/local/lib/node_modules/cnpm/lib/parse_argv.js)
npm@6.14.11 (/usr/local/lib/node_modules/cnpm/node_modules/npm/lib/npm.js)
node@10.21.0 (/usr/bin/node)
npminstall@3.28.0 (/usr/local/lib/node_modules/cnpm/node_modules/npminstall/lib/index.js)
prefix=/usr/local
linux x64 4.18.0-147.el8.x86_64

# 有上述信息即可

安装hexo

安装:

1
[root@localhost ~]# cnpm install -g hexo-cli

测试安装是否成功:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@localhost ~]# hexo -v
hexo-cli: 4.2.0
os: Linux 4.18.0-147.el8.x86_64 linux x64
http_parser: 2.9.3
node: 10.21.0
v8: 6.8.275.32-node.56
uv: 1.34.2
zlib: 1.2.11
brotli: 1.0.7
ares: 1.15.0
modules: 64
nghttp2: 1.41.0
napi: 6
openssl: 1.1.1c
icu: 64.2
unicode: 12.1
cldr: 35.1
tz: 2019c

# 有上述信息即可

初始化博客目录

创建blog目录:

1
2
3
4
5
6
7
8
9
--查看当前路径
[root@localhost ~]# pwd
/root
--在root目录下创建blog目录
[root@localhost ~]# mkdir blog
--进入blog目录
[root@localhost ~]# cd blog/
[root@localhost blog]# pwd
/root/blog

初始化blog目录:

1
2
3
4
5
6
7
8
9
10
11
[root@localhost blog]# hexo init
INFO Cloning hexo-starter https://github.com/hexojs/hexo-starter.git
WARN git clone failed. Copying data instead
FATAL { err:
{ Error: ENOENT: no such file or directory, scandir '/usr/local/lib/node_modules/hexo-cli/assets'
errno: -2,
code: 'ENOENT',
syscall: 'scandir',
path: '/usr/local/lib/node_modules/hexo-cli/assets' } } 'Something\'s wrong. Maybe you can find the solution here: %s' '\u001b[4mhttp://hexo.io/docs/troubleshooting.html\u001b[24m'
[root@localhost blog]# cd blog
bash: cd: blog: 没有那个文件或目录

但出现上述信息

解决:安装git即可

1
[root@localhost blog]# yum -y install git

再进行初始化blog目录操作:

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost blog]# hexo init
INFO Cloning hexo-starter https://github.com/hexojs/hexo-starter.git
INFO Install dependencies
added 188 packages from 443 contributors and audited 194 packages in 34.925s

15 packages are looking for funding
run `npm fund` for details

found 0 vulnerabilities

INFO Start blogging with Hexo!
# 显示如上信息即可

查看现在blog目录内容:

1
2
3
4
5
6
7
8
9
10
[root@localhost blog]# ls -l
总用量 76
-rw-r--r--. 1 root root 0 1月 27 11:19 _config.landscape.yml
-rw-r--r--. 1 root root 2439 1月 27 11:19 _config.yml
drwxr-xr-x. 165 root root 8192 1月 27 11:20 node_modules
-rw-r--r--. 1 root root 615 1月 27 11:19 package.json
-rw-r--r--. 1 root root 56654 1月 27 11:20 package-lock.json
drwxr-xr-x. 2 root root 52 1月 27 11:19 scaffolds
drwxr-xr-x. 3 root root 20 1月 27 11:19 source
drwxr-xr-x. 2 root root 22 1月 27 11:19 themes

启动博客(在本地http://localhost:4000端口)

1
2
3
4
[root@localhost blog]# hexo s
INFO Validating config
INFO Start processing
INFO Hexo is running at http://localhost:4000 . Press Ctrl+C to stop.

(配访问结果图)

创建一篇新博客

创建一篇博客:

1
2
3
[root@localhost blog]# hexo n "我的第一篇博客文章"
INFO Validating config
INFO Created: ~/blog/source/_posts/我的第一篇博客文章.md

博客存放位置:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost blog]# pwd
/root/blog
[root@localhost blog]# ls
_config.landscape.yml db.json package.json scaffolds themes
_config.yml node_modules package-lock.json source
[root@localhost blog]# cd source/_posts/
[root@localhost _posts]#
[root@localhost _posts]# ls -l
总用量 8
-rw-r--r--. 1 root root 75 1月 27 11:23 我的第一篇博客文章.md
-rw-r--r--. 1 root root 838 1月 27 11:19 hello-world.md

# 博客都存放在"~blog/source/_posts/"路径下

编辑博客:

1
2
3
[root@localhost _posts]# vim 我的第一篇博客文章.md

# 使用markdown语法进行编辑

返回到blog目录下,将新的博客部署到本地:

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
[root@localhost _posts]# cd ../..
[root@localhost blog]# pwd
/root/blog
[root@localhost blog]# ls
_config.landscape.yml db.json package.json scaffolds themes
_config.yml node_modules package-lock.json source
[root@localhost blog]#
[root@localhost blog]# hexo clean
INFO Validating config
INFO Deleted database.
[root@localhost blog]#
[root@localhost blog]# hexo g
INFO Validating config
INFO Start processing
INFO Files loaded in 168 ms
INFO Generated: archives/index.html
INFO Generated: archives/2021/index.html
INFO Generated: archives/2021/01/index.html
INFO Generated: index.html
INFO Generated: fancybox/jquery.fancybox.min.css
INFO Generated: js/script.js
INFO Generated: css/style.css
INFO Generated: 2021/01/27/我的第一篇博客文章/index.html
INFO Generated: 2021/01/27/hello-world/index.html
INFO Generated: css/fonts/fontawesome-webfont.woff2
INFO Generated: css/fonts/fontawesome-webfont.woff
INFO Generated: fancybox/jquery.fancybox.min.js
INFO Generated: css/fonts/fontawesome-webfont.ttf
INFO Generated: js/jquery-3.4.1.min.js
INFO Generated: css/fonts/FontAwesome.otf
INFO Generated: css/images/banner.jpg
INFO Generated: css/fonts/fontawesome-webfont.eot
INFO Generated: css/fonts/fontawesome-webfont.svg
INFO 18 files generated in 460 ms

# 显示上述信息即可

再次启动并访问:

1
2
3
4
[root@localhost blog]# hexo s
INFO Validating config
INFO Start processing
INFO Hexo is running at http://localhost:4000 . Press Ctrl+C to stop.

将本地博客部署到GitHub上

GitHub设置

(配图)

新建一个仓库 New repository

Repository name必须是”GitHub昵称.github.io”,我的就是”1ceC0la.github.io”

Description(optional 可选):我的hexo博客

选择Pbulic

最后点击Create repository

本地设置

git部署插件安装指令(须在blog目录下):

1
[root@localhost blog]# cnpm install --save hexo-deployer-git

修改blog目录下的_config.yml文件:

1
2
3
4
5
6
7
[root@localhost blog]# vim _config.yml

# 修改文件底部
deploy:
type: git
repo: https://github.com/1ceC0la/1ceC0la.github.io.git
branch: master

本地推到GitHub

1
2
3
[root@localhost blog]# hexo d

# 期间需要输出GitHub用户名和密码

(配访问图)

到此整个部署工作完成。

更换主题

(默认主题换成yilia主题)

先将目标主题拷贝到本地themes目录下

1
2
3
4
5
6
7
8
9
[root@localhost blog]# git clone https://github.com/litten/hexo-theme-yilia.git themes/yilia
正克隆到 'themes/yilia'...
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 2037 (delta 0), reused 0 (delta 0), pack-reused 2036
接收对象中: 100% (2037/2037), 10.53 MiB | 55.00 KiB/s, 完成.
处理 delta 中: 100% (1079/1079), 完成.

# 显示如上信息即可

然后修改配置文件_config.yml:

1
2
3
[root@localhost blog]# vim _config.yml
# 将theme:landscape改成yilia,如下
theme: yilia

完成后生成新的博客

1
2
[root@localhost blog]# hexo clean
[root@localhost blog]# hexo g

再推到GitHub上

1
[root@localhost blog]# hexo d

结束。

hexo命令

init

1
$ hexo init [folder]

新建一个网站。如果没有设置 folder ,Hexo 默认在目前的文件夹建立网站。

This command is a shortcut that runs the following steps:

  1. Git clone hexo-starter including hexo-theme-landscape into the current directory or a target folder if specified.
  2. Install dependencies using a package manager: Yarn 1, pnpm or npm, whichever is installed; if there are more than one installed, the priority is as listed. npm is bundled with Node.js by default.

new

1
$ hexo new [layout] <title>

新建一篇文章。如果没有设置 layout 的话,默认使用 _config.yml 中的 default_layout 参数代替。如果标题包含空格的话,请使用引号括起来。

1
$ hexo new "post title with whitespace"
参数 描述
-p, --path 自定义新文章的路径
-r, --replace 如果存在同名文章,将其替换
-s, --slug 文章的 Slug,作为新文章的文件名和发布后的 URL

默认情况下,Hexo 会使用文章的标题来决定文章文件的路径。对于独立页面来说,Hexo 会创建一个以标题为名字的目录,并在目录中放置一个 index.md 文件。你可以使用 --path 参数来覆盖上述行为、自行决定文件的目录:

1
hexo new page --path about/me "About me"

以上命令会创建一个 source/about/me.md 文件,同时 Front Matter 中的 title 为 "About me"

注意!title 是必须指定的!如果你这么做并不能达到你的目的:

1
hexo new page --path about/me

此时 Hexo 会创建 source/_posts/about/me.md,同时 me.md 的 Front Matter 中的 title 为 "page"。这是因为在上述命令中,hexo-cli 将 page 视为指定文章的标题、并采用默认的 layout

generate

1
$ hexo generate

生成静态文件。

选项 描述
-d, --deploy 文件生成后立即部署网站
-w, --watch 监视文件变动
-b, --bail 生成过程中如果发生任何未处理的异常则抛出异常
-f, --force 强制重新生成文件 Hexo 引入了差分机制,如果 public 目录存在,那么 hexo g 只会重新生成改动的文件。 使用该参数的效果接近 hexo clean && hexo generate
-c, --concurrency 最大同时生成文件的数量,默认无限制

该命令可以简写为

1
$ hexo g

publish

1
$ hexo publish [layout] <filename>

发表草稿。

server

1
$ hexo server

启动服务器。默认情况下,访问网址为: http://localhost:4000/

选项 描述
-p, --port 重设端口
-s, --static 只使用静态文件
-l, --log 启动日记记录,使用覆盖记录格式

deploy

1
$ hexo deploy

部署网站。

参数 描述
-g, --generate 部署之前预先生成静态文件

该命令可以简写为:

1
$ hexo d

render

1
$ hexo render <file1> [file2] ...

渲染文件。

参数 描述
-o, --output 设置输出路径

migrate

1
$ hexo migrate <type>

从其他博客系统 迁移内容

clean

1
$ hexo clean

清除缓存文件 (db.json) 和已生成的静态文件 (public)。

在某些情况(尤其是更换主题后),如果发现您对站点的更改无论如何也不生效,您可能需要运行该命令。

list

1
$ hexo list <type>

列出网站资料。

version

1
$ hexo version

显示 Hexo 版本。

选项

安全模式

1
$ hexo --safe

在安全模式下,不会载入插件和脚本。当您在安装新插件遭遇问题时,可以尝试以安全模式重新执行。

调试模式

1
$ hexo --debug

在终端中显示调试信息并记录到 debug.log。当您碰到问题时,可以尝试用调试模式重新执行一次,并 提交调试信息到 GitHub

简洁模式

1
$ hexo --silent

隐藏终端信息。

自定义配置文件的路径

1
2
3
4
5
# 使用 custom.yml 代替默认的 _config.yml
$ hexo server --config custom.yml

# 使用 custom.yml 和 custom2.json,其中 custom2.json 优先级更高
$ hexo generate --config custom.yml,custom2.json,custom3.yml

自定义配置文件的路径,指定这个参数后将不再使用默认的 _config.yml
你可以使用一个 YAML 或 JSON 文件的路径,也可以使用逗号分隔(无空格)的多个 YAML 或 JSON 文件的路径。例如:

1
2
3
4
5
# 使用 custom.yml 代替默认的 _config.yml
$ hexo server --config custom.yml

# 使用 custom.yml, custom2.json 和 custom3.yml,其中 custom3.yml 优先级最高,其次是 custom2.json
$ hexo generate --config custom.yml,custom2.json,custom3.yml

当你指定了多个配置文件以后,Hexo 会按顺序将这部分配置文件合并成一个 _multiconfig.yml。如果遇到重复的配置,排在后面的文件的配置会覆盖排在前面的文件的配置。这个原则适用于任意数量、任意深度的 YAML 和 JSON 文件。

显示草稿

1
$ hexo --draft

显示 source/_drafts 文件夹中的草稿文章。

自定义 CWD

1
$ hexo --cwd /path/to/cwd

自定义当前工作目录(Current working directory)的路径。

参考文献

CodeSheep的B站视频:

https://www.bilibili.com/video/BV1q4411i7gL/?spm_id_from=333.788.recommend_more_video.0