Hexo教程
来源Hexo官方教材:
https://hexo.io/zh-cn/docs/
本教程经过博主的精心实验总结而来,比较官网的教材更易于读懂易于操作
以下操作过程均是在ArchLinux系统中进行,Windows操作系统也可以
安装Hexo
普通安装(全局安装 推荐)
推荐使用全局安装方式,省去维护成本
该命令会在/usr/lib/node_modules
目录(Nodejs组件安装目录)
1 | npm install -g hexo-cli |
进阶安装(局部安装)
对于熟悉npm
的用户, 可以仅局部安装hexo
包。
首先创建一个目录,在这个目录中执行:
1 | npm install hexo #局部安装(不推荐) |
安装以后,可以使用以下两种方式执行 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将会在指定文件夹中新疆所需的文件:
1 | hexo init <folder> |
cd到生成目录再进行npm install
才能生成Hexo博客管理网站目录:
hexo init
生成文件
_config.yml Hexo的主配置文件
网站的 配置 信息,您可以在此配置大部分的参数
1 | # Hexo Configuration |
package.json
应用程序的信息,由npm init生成
EJS, Stylus 和 Markdown renderer 已默认安装,您可以自由移除
scaffolds 文件夹
模版文件夹
当您新建文章时,Hexo 会根据 scaffold 来建立文件
Hexo的模板是指在每次新建的文章文件中默认填充的内容。例如,如果您修改scaffold/post.md
中的Front-matter
(写文章时不会显示,但会影响比如文章标题的显示、生成时间、标签、分类等…)内容,那么每次新建一篇文章时都会包含这个修改。
source文件夹
资源文件夹是存放用户资源的地方。除
_posts
文件夹之外,开头命名为 _ (下划线)的文件 / 文件夹和隐藏的文件将会被忽略。Markdown 和 HTML 文件会被解析并放到 public 文件夹,而其他文件会被拷贝过去
themes文件夹
主题文件夹
Hexo 会根据主题来生成静态页面
主题下载后将其解压,修改默认名称到此目录,后修改_config.yml
文件中theme: <theme folder name>
即可
public文件夹
hexo generate 命令后生成静态文件存放路径:
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 | #安装插件 hexo-deployer-git |
在配置文件_config.yml
中添加存储网址等信息才可以正确的部署:
1 | # Deployment |
以上方式如果没有配置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 | categories: |
以上会使文章加上分类为Diary的分类,加上两个同级标签分别是:PS3、Games
Hexo 不支持指定多个同级分类
1
2
3categories:
- Diary
- Life
以上会使分类Life成为Diary的子分类。
如果你需要为文章添加多个分类,可以尝试以下方法:
1
2
3
4categories:
- [Diary, PlayStation]
- [Diary, Games]
- [Life]
此时这篇文章同时包括三个分类: PlayStation 和 Games 分别都是父分类 Diary 的子分类,同时 Life 是一个没有子分类的分类。
以上使用YAML格式,也可以使用JSON格式。
服务器
1 | hexo server -p 5000 #制定端口运行 |
服务器默认
-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 | hexo generate #使用hexo把source中的.md文件生成到bublic文件夹的前端代码。 |
永久链接
可以在 _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 | #需要插件安装到Hexo根目录 |
_config.yml文件编辑
1 | # Deployment |
1 | hexo d #一般情况部署到git会提示输入用户名密码(GitHub已失效此方式) |
用户名密码方式已失效,建议往下看SSH方式…
部署到gitee
用到的Hexo插件:hexo-deployer-git(同上安装即可)
参考:
GitHub:Generating a new SSH key and adding it to the ssh-agent
注意下面的repo没有http协议提交,如果使用http则依旧需要用户名密码。
1 | ## Docs: https://hexo.io/docs/one-command-deployment |
如下命令来生成 sshkey:
1 | ssh-keygen -t ed25519 -C "f_ding@126.com" -f ~/.ssh/gitee |
列出公钥:
1 | cat ~/.ssh/id_ed25519.pub ⏎ |
复制cat后的全部内容到:
- 随便起名称
- 复制到公钥的文本框
- 点击确定即可看到上面多了一个公钥
显示以下则成功:
复制仓库ssh链接(一定要是SSH链接才行):
写入Hexo 根目录下_config.yml:
1 | - type: git |
执行hexo d
无需输入密码即可成功提交代码。
利用sftp部署
1 | npm install hexo-deployer-sftp --save #安装部署插件 |
编辑_config.yml文件:
1 | # Deployment |
注意:有多个部署项目时候的.yaml配置文件的写法,前面必须以类型(type)前面加“-”,才可以进行多个目标主机的部署,部署到Linux主机上不建议使用root用户进行部署,如果是root用户将会卡死,甚至站点部署文件缺失
卸载Hexo(全局卸载)
1 | npm uninstall hexo-cli -g |
如果是局部,直接删除局部安装的Hexo,删除init目录,删除~/.xprofile下的环境变量即可