让我幸福感爆棚的 Hexo 脚本!

刚刚开始用 Hexo,总会有很多期待的事情,毕竟以前没有用过。Hexo 让我感觉有很轻巧的感觉,没有 WordPress 的厚重感;除此之外,也会遇到一些问题。因为这些原因,我觉得可以自己修改一些地方让我自己用起来顺手一点。

问题阐述

  1. 由于 Kiyoshi 的博客现在并没有用独立或者虚拟服务器来托管,而是使用 GayHub GitHub 提供的 Git Pages 服务来托管 Hexo 生成的静态页面,所以自定义域名必须用一个叫 CNAME 的文件来标记。问题在于:CNAME 需要保存在 /hexo/public 文件夹中,而这个文件夹有时候会被 hexo clean 来删除掉以便更新某些内容,那么每次删除后都需要手动重新创建一个 CNAME 文件来应用自定义域名。这样肯定不是程序员解决问题的方式!

  2. 由于 Hexo 是个 CLI 的软件,所以在写文章并测试文章显示正常与否(因为要写很多 LaTex)时就需要开很多窗口,其中包括 VSCode,Explorer 和 PowerShell(我也不想用辣鸡 Windows 但是我想打游戏啊!)。

问题分析

  1. hexo deploy 这一条指令添加功能使其能自动在 /hexo/public 文件夹中创建内容为自定义域名的文件 CNAME

  2. hexo new 这一条指令添加自动使用 VSCode 打开刚创建的文件的功能。

实现方法

通过查阅 Hexo API,可以找到 Hexo 向我们开放的 Events。利用事件,我们可以很容易地以 Plugins 的形式向不同的 Hexo 事件添加功能。

事件列表

  • deployBefore:在部署完成之前发生的 Event
  • deployAfter:在部署完成之后发生的 Event
  • exit:在收到停止指令,尚未结束 Hexo 服务器之前发生的 Event
  • generateBefore:在完成生成静态页面文件之前的 Event
  • generateAfter:在完成生成静态页面文件之后的 Event
  • new:在完成了新文章的文件创建之后的 Event

事件选择

  1. 对于第一个问题,我们需要在部署完成之前创建 CNAME 文件,所以选择 deployBefore Event。generate 事件也可以完成任务,但是频率太高,没有必要使用。

  2. 直接选择 new Event!

代码实现

在 Hexo 的目录结构中,普通情况下是不存在 scripts 这一个文件夹,所以 Kiyoshi 根据 Hexo 的文档在 Hexo 根目录下创建了这个文件夹。
在文件夹中,创建一个 JS 脚本,随便取啥名都行的,Kiyoshi 的叫做 mods.js

1
2
3
4
5
6
7
8
9
10
const exec = require('child_process').exec;

// This block of codes is deprecated
hexo.on('deployBefore', () => {
exec('echo ${YOUR_DOMAIN} > ${YOUR_PATH}');
});

hexo.on('new', (file) => {
exec(`code ${file.path}`);
});

首先我们在文件中 require 了 exec() 函数,这个函数当做 shell 来用,也就是说所有指令和应用都可以用。要想调用到这个函数,我们必须安装 shelljs。使用 npm install shelljs --save 安装就可以啦。

后面的代码分别为 deployBeforenew 注册了一些任务,对于 Kiyoshi 来说就是写一个 CNAME 文件到 public 文件夹和在执行 hexo new [POST_NAME] 的时候帮我用 VSCode 打开。

总结

都是很咸鱼很简单的操作所以没什么好总结的!

以上!

后记

然后 11 告诉我把文件放在 /hexo/source 下 Hexo 就会自动帮我复制过去(雾)。

End - of - File

文章作者: Kiyoshi
文章链接: https://blog.k1yoshi.com/article/scripts-that-make-me-gay/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Kiyoshi's Blog