Hexo最佳实践推荐

该实践其实是一个目录操作规范,以易于使用为最终目的,将需要个性化和经常会变动的目录或文件独立出来,借助简单的 Shell 脚本进行 Hexo 的初始化及 NexT 主题的升级。

说明:来源于个人使用过程中的总结,可能并不适合所有人,仅供参考。

1. 最终目录结构

.
├── config_hexo.yml # 软链接到 Hexo 配置文件
├── config_next.yml # 软链接到 NexT 主题配置文件
├── core # Hexo 根目录,可自定义
│   ├── _config.yml -> ../config_hexo.yml # 个人修改后的配置文件
│   ├── _config.yml.bak # 原 Hexo 配置文件
│   ├── db.json
│   ├── node_modules
│   ├── package-lock.json
│   ├── package.json
│   ├── public
│   ├── scaffolds
│   ├── source -> ../source_hexo # 个人变动后的资源目录
│   ├── source_bak # 原 Hexo 资源目录的备份
│   └── themes
│   ├── landscape # Hexo 默认主题根目录
│   └── next # NexT 主题根目录
│ ├── LICENSE.md
│ ├── README.md
│ ├── _config.yml -> ../../../config_next.yml # 个人修改后的配置文件
│ ├── _config.yml.bak # 原主题配置文件的备份
│ ├── crowdin.yml
│ ├── docs
│ ├── gulpfile.js
│ ├── languages
│ ├── layout
│ ├── package.json
│ ├── scripts
│ └── source # 主题下的资源目录
├── deploy.sh # 3. 同步远程服务器脚本
├── init.sh # 1. Hexo 初始化脚本
├── source_hexo # 软链接到 Hexo 下的资源目录
├── source_next # 需要添加到 NexT 下资源目录的文件放这里
└── update_next.sh # 2. NexT 主题升级脚本

1.1. 在 Github 上我们需要建立两个仓库

  • username/username.github.io 对应 Hexo 部署的目标目录,在 Hexo 根目录下的配置文件中进行设置。
  • username/blog.xxx.com 名字随意,对应上面的目录。其中 core 目录需要添加到 .gitignore 文件。

1.2. 如何使用

⚠️ 说明:每次写文章只需要步骤 3 ~ 5,只有当切换到一个新的工作环境时,才需要执行完整的步骤 1 ~ 5。

  1. 从 Github 拉下来环境仓库

    ➜  git clone https://github.com/username/blog.xxx.com.git
  2. 初始化 Hexo 环境

    # ⚠️ 前提:你已经安装好了 NodeJS 环境 和 hexo-cli
    # 如果需要,可以自行修改 shell 文件
    ➜ chmod u+x init.sh
    ➜ ./init.sh
  3. 进入 Hexo 根目录

    # core 的名字可以在脚本 init.sh 中修改
    cd core

    # 创建一篇文章
    ➜ hexo new post "一篇新文章"
  4. Hexo 发布部署

    ➜  hexo clean && hexo g -d
  5. 将本次修改推送到仓库

    # 先退回到 core 目录到上一级,即仓库根目录
    ➜ git add .
    ➜ git commit -m "新增文章"
    ➜ git push

2. 脚本文件

init.sh

当切换到一个新的工作环境时,使用该脚本初始化 Hexo 及基于原数据的工作环境,之后便可以继续写文章、发布了。

示例文件内容如下:

# 初始化 Hexo
# 注意,这里并没有检查 NodeJS 环境 和 hexo-cli
# 如果需要,可自行扩展
hexo init core

# 安装依赖,修改配置
cd core
npm install
npm install hexo-deployer-git --save
npm install hexo-generator-searchdb --save
npm install hexo-abbrlink --save
npm install hexo-generator-sitemap --save
npm install hexo-generator-baidu-sitemap --save
npm install hexo-filter-nofollow --save
mv _config.yml _config.yml.bak
ln -s ../config_hexo.yml _config.yml
mv source source_bak
ln -s ../source_hexo source

# 安装、配置主题
git clone https://github.com/theme-next/hexo-theme-next themes/next
cd themes/next
mv _config.yml _config.yml.bak
ln -s ../../../config_next.yml _config.yml
\cp -rp ../../../source_next/* source

update_next.sh

当需要升级 NexT 主题时使用,示例文件内容如下:

# 还原本地修改
cd core/themes/next
git checkout . && git clean -xdf

# 更新源码
git pull

# 恢复修改
mv _config.yml _config.yml.bak
ln -s ../../../config_next.yml _config.yml
\cp -rp ../../../source_next/* source

deploy.sh

该脚本非必须,只有需要将最终部署好的文件分发到不同服务器时才用得到。

同步方式推荐使用 rsync 命令,这里不再具体举例。关于该工具到使用,可以参阅:rsync 的基本使用入门