来源Hexo官方教材:
https://hexo.io/zh-cn/docs/
本教程经过博主的精心实验总结而来,比较官网的教材更易于读懂易于操作
以下操作过程均是在ArchLinux系统中进行,Windows操作系统也可以

安装Hexo

普通安装(全局安装 推荐)

推荐使用全局安装方式,省去维护成本
该命令会在/usr/lib/node_modules目录(Nodejs组件安装目录)

1
npm install -g hexo-cli

进阶安装(局部安装)

对于熟悉npm的用户, 可以仅局部安装hexo包。

首先创建一个目录,在这个目录中执行:

1
2
npm install hexo	#局部安装(不推荐)
npm install -g hexo-cli #全局安装(推荐使用)

安装以后,可以使用以下两种方式执行 Hexo

  • 局部安装Hexo文件夹直接移动到/usr/lib/node_modules目录下操作:

    1
    npx hexo <command>
  • 添加环境变量到.xprofile后操作:

    1
    hexo <command>

注意:教程中提到添加以下环境变量,但经过测试:

1
echo 'PATH="$PATH:./node_modules/.bin"' >> ~/.xprofile       #可加可不加,一样可以cd到Hexo站点目录下执行hexo g等站点操作命令

生成Hexo站点

首先要大概了解Hexo-cil主要作用是用来生成Hexo站点的,而真正的Hexo站点是Hexo init <folder>,区别在于:

左为Hexo-cil  右为Hexo站点

安装完成后,请执行以下命令,Hexo将会在指定文件夹中新疆所需的文件:

1
2
3
hexo init <folder>
cd <folder>
npm install

cd到生成目录再进行npm install才能生成Hexo博客管理网站目录:

生成站点目录

hexo init 生成文件

_config.yml Hexo的主配置文件

网站的 配置 信息,您可以在此配置大部分的参数

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# Hexo Configuration
## Docs: https://hexo.io/docs/configuration.html
## Source: https://github.com/hexojs/hexo/

# Site
title: Hexo #网站标题
subtitle: '' #网站副标题
description: '' #网站描述
keywords: #网站的关键词。支援多个关键词。
author: John Doe #您的名字
language: en #网站使用的语言。对于简体中文用户来说,使用不同的主题可能需要设置成不同的值,请参考你的主题的文档自行设置,常见的有 zh-Hans和 zh-CN。
timezone: '' #网站时区。Hexo 默认使用您电脑的时区。请参考 _时区列表_ 进行设置,如 America/New_York, Japan, 和 UTC 。一般的,对于中国大陆地区可以使用 Asia/Shanghai。

# URL
## If your site is put in a subdirectory, set url as 'http://example.com/child' and root as '/child/'
url: http://example.com #网址, must starts with http:// or https://
root: / #网站根目录
permalink: :year/:month/:day/:title/ #public文件夹中文章的 永久链接 格式
permalink_defaults: #_永久链接_中各部分的默认值
pretty_urls: #改写 _permalink_ 的值来美化 URL
trailing_index: true #是否在永久链接中保留尾部的 index.html,设置为 false 时去除
trailing_html: true #是否在永久链接中保留尾部的 .html, 设置为 false 时去除 (对尾部的 index.html无效)

# Directory
source_dir: source #资源文件夹,这个文件夹用来存放内容。
public_dir: public #公共文件夹,这个文件夹用于存放生成的站点文件。
tag_dir: tags #标签文件夹
archive_dir: archives #归档文件夹
category_dir: categories #分类文件夹
code_dir: downloads/code #Include code 文件夹,source_dir 下的子目录
i18n_dir: :lang #国际化(i18n)文件夹
skip_render: #跳过指定文件的渲染。匹配到的文件将会被不做改动地复制到 public 目录中。您可使用 glob 表达式来匹配路径。

# Writing
new_post_name: :title.md #source文件夹新文章的文件名称
default_layout: post #预设布局
titlecase: false #把标题转换为 title case
external_link: # 在新标签中打开链接
enable: true #在新标签中打开链接
field: site #对整个网站(site)生效或仅对文章(post)生效
exclude: '' #需要排除的域名。主域名和子域名如 www 需分别配置
filename_case: 0 #把文件名称转换为 (1) 小写或 (2) 大写
render_drafts: false #显示草稿
post_asset_folder: false #启动 _Asset 文件夹_即:文章资源文件夹
relative_link: false #把链接改为与根目录的相对位址
future: true #显示未来的文章
highlight: #代码块的设置, see _Highlight.js_ section for usage guide
enable: true
line_number: true
auto_detect: false
tab_replace: ''
wrap: true
hljs: false
prismjs: #代码块的设置, see _PrismJS_ section for usage guide
enable: false
preprocess: true
line_number: true
tab_replace: ''

# Home page setting
# path: Root path for your blogs index page. (default = '')
# per_page: Posts displayed per page. (0 = disable pagination)
# order_by: Posts order. (Order by date descending by default)
index_generator:
path: ''
per_page: 10
order_by: -date

# Category & Tag
default_category: uncategorized #默认分类
category_map: #分类别名
tag_map: #标签别名

# Metadata elements
## https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta
meta_generator: true

# Date / Time format #Hexo 使用_Moment.js_来解析和显示时间。
## Hexo uses Moment.js to parse and display date
## You can customize the date format as defined in
## http://momentjs.com/docs/#/displaying/format/
date_format: YYYY-MM-DD #日期格式
time_format: HH:mm:ss #时间格式
## updated_option supports 'mtime', 'date', 'empty'
updated_option: 'mtime' #当 Front Matter 中没有指定 updated 时 updated 的取值

# Pagination
## Set per_page to 0 to disable pagination
per_page: 10 #每页显示的文章量 (0 = 关闭分页功能)
pagination_dir: page #分页目录

# Include / Exclude file(s)
## include:/exclude: options only apply to the 'source/' folder
include: #Hexo 默认会忽略隐藏文件和文件夹(包括名称以下划线和 . 开头的文件和文件夹,Hexo 的 _posts 和 _data 等目录除外)。通过设置此字段将使 Hexo 处理他们并将它们复制到 source 目录下。
exclude: #Hexo 会忽略这些文件和目录
ignore: #Ignore files/folders

# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
theme: landscape # 当前主题名称。值为false时禁用主题

# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy: #部署部分的设置
type: ''

package.json

应用程序的信息,由npm init生成
EJS, Stylus 和 Markdown renderer 已默认安装,您可以自由移除

scaffolds 文件夹

模版文件夹
当您新建文章时,Hexo 会根据 scaffold 来建立文件

默认生成模板

Hexo的模板是指在每次新建的文章文件中默认填充的内容。例如,如果您修改scaffold/post.md中的Front-matter(写文章时不会显示,但会影响比如文章标题的显示、生成时间、标签、分类等…)内容,那么每次新建一篇文章时都会包含这个修改。

source文件夹

资源文件夹是存放用户资源的地方。除 _posts 文件夹之外,开头命名为 _ (下划线)的文件 / 文件夹和隐藏的文件将会被忽略。Markdown 和 HTML 文件会被解析并放到 public 文件夹,而其他文件会被拷贝过去

source文件夹

themes文件夹

主题文件夹
Hexo 会根据主题来生成静态页面
主题下载后将其解压,修改默认名称到此目录,后修改_config.yml文件中theme: <theme folder name>即可

public文件夹

hexo generate 命令后生成静态文件存放路径:

public文件夹

Hexo网站管理命令

hexo new 命令

hexo new [layout] <title>使用:

参数 说明
-p, –path 自定义新文章的路径
-r, –replace 如果存在同名文章,将其替换
-s, –slug 文章的 Slug,作为新文章的文件名和发布后的 URL

默认使用layout_config.yml中36行内容:default_layout:post

对于独立页面(生成md文件指定于非_posts目录)来说,Hexo 会创建一个以标题为名字的目录,并在目录中放置一个 index.md 文件:

1
hexo new page "tags"

新建了页面文件: /source/tags/index.md

注意:如果标题包含空格的话,请使用引号括起来

hexo generate 命令

Hexo将md文件生成为html文件,这样才可以使得博客网站外观自然美观

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

hexo server命令

执行后,默认访问网址为: http://localhost:4000/

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

hexo generate命令

如果此命令执行后一些站点外观或配置未生效建议使用以下命令再次执行hexo generate

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

hexo deploy

可将网站部署到其他云储存,git仓库等…
详见:https://hexo.io/docs/one-command-deployment.html
部署教程:https://www.youtube.com/watch?v=B0yVJ46CTR8

注意:部署到github、gitee用到的插件是一样的,都是名为:hexo-deployer-git的插件。

进入Hexo根目录:

1
2
3
4
5
6
#安装插件 hexo-deployer-git
 ~/Desktop/hexo-code/ [master]npm install hexo-deployer-git --save
#显示如下证明已经安装此插件
 ~/Desktop/hexo-code/ [master*] npm list hexo-deployer-git
hexo-site@0.0.0 /Users/fuding/Desktop/hexo-code
└── hexo-deployer-git@3.0.0

在配置文件_config.yml中添加存储网址等信息才可以正确的部署:

1
2
3
4
5
6
7
8
9
10
11
# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
- type: git
repo: https://github.com/ding-f/ding-f.github.io.git
branch: master

- type: git
repo: https://gitee.com/ding-f/ding-f.git
branch: master

以上方式如果没有配置token or ssh key将会显示输入用户名密码(GitHub已失效此方式,建议往后看本文部署部分)。

hexo list <type>命令

用法示例

Front-matter

位于每个生成的.md文件的开头或Hexo站点文件夹的./scaffolds模板.md文件中,Front-matter分别用---位于开头和结尾,之间的语言使用的yaml

参数 描述 默认值
layout 布局 config.default_layout
title 标题 文章的文件名
date 建立日期 文件建立日期
updated 更新日期 文件更新日期
comments 开启文章的评论功能 true
tags 标签(不适用于分页)
categories 分类(不适用于分页)
permalink 覆盖文章网址

如果layout设置为false,这将不会在hexo g时应用一个主题,如果安装hexo-renderer-marked就会被解析成html格式(次段自己翻译而来)

分类和标签

分类与标签的区别在与:分类有顺序和层次(即父子关系),而标签都没有

1
2
3
4
5
categories:
- Diary
tags:
- PS3
- Games

以上会使文章加上分类为Diary的分类,加上两个同级标签分别是:PS3、Games

  • Hexo 不支持指定多个同级分类

    1
    2
    3
    categories:
    - Diary
    - Life

以上会使分类Life成为Diary的子分类。

  • 如果你需要为文章添加多个分类,可以尝试以下方法:

    1
    2
    3
    4
    categories:
    - [Diary, PlayStation]
    - [Diary, Games]
    - [Life]

此时这篇文章同时包括三个分类: PlayStation 和 Games 分别都是父分类 Diary 的子分类,同时 Life 是一个没有子分类的分类。

以上使用YAML格式,也可以使用JSON格式。

服务器

1
2
hexo server -p 5000			#制定端口运行
hexo server -s #静态模式,需要手动执行hexo g
  • 服务器默认-i为 0.0.0.0,此地址一共包含本机的内网地址(如果有),还包括回环地址(127.0.0.1 - 127.255.255.254),localhost(已实验)。

  • 如果-i参数为localhost,那只有地址127.0.0.1可以访问,外网地址不可以(已实验)。

  • 如果-i参数为127.0.0.1或者其他单个回环地址,那么只有本机的127.0.0.1才可以访问,其他回环地址不可以(已实验)。

对于一台使用无线网络的笔记本电脑,除了指向本机的127.0.0.1外,通常还有一个192.168.*.*的局域网IP,如果-i参数为192.168.1.2,就不能用127.0.0.1来访问站点了(已实验)。对于有公网IP的主机,如果您指定一个局域网IP作为-i参数的值,那么就无法通过公网来访问站点。

生成器

1
2
3
4
5
6
7
8
9
hexo generate			#使用hexo把source中的.md文件生成到bublic文件夹的前端代码。

hexo generate --watch #Hexo 能够监视文件变动并立即重新生成静态文件,在生成时会比对文件的 SHA1 checksum,只有变动的文件才会写入

hexo generate --deploy
hexo g -d #(简写)
hexo deploy --generate
hexo d -g #(简写)
#这两个作用是相同的,所跟参数不分先后顺序执行

永久链接

可以在 _config.yml 配置中调整网站的永久链接或者在每篇文章的 Front-matter 中指定(Front-matter中也有premalink这个属性可被定制)

除了下列变量外,您还可使用 Front-matter 中的所有属性Front-matter。

变量 描述
:year 文章的发表年份(4 位数)
:month 文章的发表月份(2 位数)
:i_month 文章的发表月份(去掉开头的零)
:day 文章的发表日期 (2 位数)
:i_day 文章的发表日期(去掉开头的零)
:hour 文章发表时的小时 (2 位数)
:minute 文章发表时的分钟 (2 位数)
:second 文章发表时的秒钟 (2 位数)
:title 文件名称 (relative to “source/_posts/“ folder)
:name 文件名称
:post_title 文章标题
:id 文章 ID (not persistent across cache reset)
:category 分类。如果文章没有分类,则是 default_category 配置信息。
:hash SHA1 hash of filename (same as :title) and date (12-hexadecimal)

例:

  • :year/:month/:day/:title/ 2013/07/14/hello-world/
  • :category/:title/ foo/bar/hello-world/

部署

部署到GitHub

1
2
3
#需要插件安装到Hexo根目录
npm install hexo-deployer-git --save #将部署GitHub插件安
npm list hexo-deployer-git #查看是否安装此插件

_config.yml文件编辑

1
2
3
4
5
6
# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
type: git
repo: https://github.com/ding-f/ding-f.github.io.git #(需要用户名密码,SSH方式不需要)
branch: master
1
hexo d #一般情况部署到git会提示输入用户名密码(GitHub已失效此方式)

用户名密码方式已失效,建议往下看SSH方式…

部署到gitee

用到的Hexo插件:hexo-deployer-git(同上安装即可)

参考:

Gitee帮助中心:生成/添加SSH公钥

GitHub:Generating a new SSH key and adding it to the ssh-agent

GitHub:Adding a new SSH key to your GitHub account

注意下面的repo没有http协议提交,如果使用http则依旧需要用户名密码。

1
2
3
4
5
6
7
8
9
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
- type: git
repo: git@gitee.com:ding-f/ding-f.git
branch: master

- type: git
repo: git@github.com:ding-f/ding-f.github.io.git
branch: master

如下命令来生成 sshkey:

1
2
3
4
5
ssh-keygen -t ed25519 -C "f_ding@126.com" -f ~/.ssh/gitee
# 生成加密类型为 ed25519 的公私密钥对文件到默认ssh文件夹~/.ssh
ls ~/.ssh
id_ed25519
id_ed25519.pub

列出公钥:

1
2
 cat ~/.ssh/id_ed25519.pub                    ⏎
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEBLYRyxny/iXVM6PmxYrGMrDd438arVvGV/YV/qhrTS f_ding@126.com

复制cat后的全部内容到:

添加公钥

  • 随便起名称
  • 复制到公钥的文本框
  • 点击确定即可看到上面多了一个公钥

显示以下则成功:

复制仓库ssh链接(一定要是SSH链接才行):

写入Hexo 根目录下_config.yml:

1
2
3
- type: git
repo: git@gitee.com:ding-f/ding-f.git
branch: master

执行hexo d无需输入密码即可成功提交代码。

利用sftp部署

1
npm install hexo-deployer-sftp --save   #安装部署插件

编辑_config.yml文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
- type: git
repo: https://github.com/ding-f/ding-f.github.io.git
branch: main


- type: sftp
host: fuding.qicp.vip
user: fu #必须使用普通用户来作为部署文件的参数
pass: ********
remotePath: /www/wwwroot/Hexo/
port: 22
privateKey: #这里可以不写
agent: #一样可以不写

注意:有多个部署项目时候的.yaml配置文件的写法,前面必须以类型(type)前面加“-”,才可以进行多个目标主机的部署,部署到Linux主机上不建议使用root用户进行部署,如果是root用户将会卡死,甚至站点部署文件缺失

卸载Hexo(全局卸载)

1
npm uninstall hexo-cli -g

如果是局部,直接删除局部安装的Hexo,删除init目录,删除~/.xprofile下的环境变量即可

部署到其他

参见:https://hexo.io/zh-cn/docs/one-command-deployment.html