记录一下 hexo 基础用法。
安装
node 环境下,全局安装 hexo-cli
1 | npm install hexo-cli -g |
初始化
进入到一个放置 blog 的 空文件夹
1 | hexo init |
浏览器输入 localhost:4000,出现 blog 界面
换主题
Hexo 官网提供了一些主题 https://hexo.io/themes/
- git clone 主题到 blog 项目
/themes
文件夹下,将全局 _config.yml 中的 theme 名字更改为 clone 下来的主题文件夹的名字 - 主题中有可供选择的几套样式,更改主题 _config.yml 里的 scheme 属性
- 设置代码高亮样式 更改主题 _config.yml 里的 hightlight_theme 属性
- 切换 Hexo 语言 修改全局 _config.yml 里的 language 属性,值为 zh-Hans (Hexo 3+) / zh-CN(Hexo 4+) 即为简体中文(默认为英文)
- (更换完主题,需要重启&重新编译应用,方能生效)
- 由于主题也是一个 git 仓库,下载后记得删除 .git 文件,否则主题文件是无法提交的
- 主题更新:
- 由于先前已经删除了主题目录下的
.git
文件夹,所以无法通过git pull
来更新。每次更新需要将新的代码 clone 到/theme
文件夹中,再手动迁移,比较麻烦,建议有大版本时再更新…
- 由于先前已经删除了主题目录下的
生成文章
1 | hexo new "postName" # /source/_post/[postName]/ & /source/_post/[postName].md |
删除文章
1 | hexo clean # delete /public |
其他
- 插入本地图片
每次hexo new 'postName'
时,都会创建一个与文章名相同的文件夹,将文章所需资源放入该文件夹里,引用时使用{% asset_img [文件名] %}
即可。 - 页面增加“阅读更多”按钮
在 .md 文件中增加<!--more-->
注释,如果想自动添加“阅读更多”按钮,可在主题下的_config.yml
中将auto_excerpt
下的enable
设置为true
。
插件
- hexo-deployer-git 一键部署到 GitPage
- hexo-douban 爬取豆瓣个人条目相关信息
- hexo-generator-search 全文搜索功能
部署
hexo d
部署前,需要安装npm install hexo-deployer-git --save
。
修改全局 _config.yml
中的配置:
1 | deploy: |
之后,只需要 hexo d -g
一条命令就可以生成和部署了。关于 hexo-deployer-git 这个插件的参数 hexo 官方文档 介绍的并不全面,建议去 hexo-deployer-git 官方文档 查看相关配置参数。
注意:
- 默认部署,只将生成的 HTML 相关文件(
/public
文件夹)推送到 github - 若想把本地的生成器项目相关文件也推送到 github,则要配置
extend_dirs: /
- message、name、email 的内容要用引号括起来
- name、email 的配置信息用来覆盖全局的 git config 中的配置,更改这两项后,需要删除根目录下的
.deploy_git
,部署时才会生效 - master 只能放
/public
下的文件,将项目所有文件放到 master 分支下,会导致页面 build 失败。若想将本地代码全部提交,可部署在其他分支(在_config.yml
中增加其他分支配置信息,详情参考文档) - 避免提交 node_modules,需在项目下新建
.gitignore
文件(为什么不使用 extend_dirs ?因为需要添加的文件夹太多…) - 若遇见
Error: EACCES: permission denied, unlink /XXX
相关的错误,大部分是由没权限引起的,使用sudo chown -R
whoami:staff /blog 目录
即可
自动化部署
- 使用 github action 脚本自动部署 hexo pages 到目标分支。
当前开发时的源代码在 develop 分支上,静态文件会部署到 master 分支上。 原理其实就是利用 github action events 触发编译操作,在 github 提供的机器上编译后发布到 master 分支。这样就省去了在本地编译的麻烦。
需要注意的是,如果使用 ssh 方式部署,那么需要将 ssh 公钥、秘钥上传到项目中,否则机器没权限提交代码。
部署配置过程参考:https://juejin.cn/post/7014675289728876574
- 部署后文章的更新时间异常
- 文章更新时间错误 :github action 默认时区是 UCT 时间 08:00,比北京时间快 8 个小时。因此运行环境要改为北京时间。(PS:中国一共五个时区,命名是历史原因,北京所在的时区名字就是 Asia/Shanghai)
1
2
3
4
5name: Deploy CI
on:
push
env:
TZ: Asia/Shanghai - 所有文章的更新时间都被更新成最新时间:git 在推送更新时,并不保存文件的访问时间、修改时间等信息,故默认取了 github 推送时间,需要将 文件的 update 时间更改为单个文件在 github 上的推送时间。相关文章↓:
搜索功能
全局安装插件 npm install hexo-generator-search --save
修改全局 _config.yml
中的配置:
1 | search: |
修改主题 themes/next/_config.yml
中的配置:
1 | local_search: |
生效:hexo clean
、hexo g
、hexo s
图片放大查看功能
在 themes/next/_config.yml
文件中,将 fancybox
或者 mediumzoom
置为 true。
Hexo 目录解析
1 | ├── node_modules # 依赖包-安装插件及所需nodejs模块。 |