0%

自动备份Hexo源文件

前言

为了避免Hexo源文件丢失,采用将其自动备份Hexo源文件到Github的方法,在执行hexo d(eploy)命令后自动执行Git命令以push源文件到Github仓库。

原理

Node.js的事件监听机制监听Hexo的事件。可以用 on 方法监听 Hexo 所发布的事件,也可以使用 emit 方法对 Hexo 发布事件,参考见Hexo文档

Hexo发布的事件 说明
deployBefore 在部署完成前发布。
deployAfter 在部署成功后发布。
exit 在Hexo 结束前发布。
generateBefore 在静态文件生成前发布。
generateAfter 在静态文件生成后发布。
new 在文章文件建立后发布。该事件返回文章参数。
processBefore 在处理原始文件前发布。此事件会返回一个地址,代表 Box(Box)的根目录。
processAfter 在原始文件处理后发布。此事件会返回一个地址,代表 Box(Box)的根目录。
ready 在初始化完成后发布。

通过监听Hexo的deployAfter事件,待部署成功后自动运行Git备份命令,从而达到自动备份的目的。

实现

将Hexo blog目录加入Git仓库

首先需要在Github创建一个新的repository,名字与本地Hexo文件夹同名即可。然后进入本地Hexo blog文件夹,按顺序执行以下命令:

1
2
3
4
$ git init
$ git remote add origin git@github.com:yourname/hexo.git
$ git pull origin master

每次执行hexo g(enerate)命令时,public/、.deploy、*.log文件夹会重写更新,因此需要在.gitignore文件(如果没有,手动创建一个)中写入public/、.deploy、*.log以忽略这几个目录,加快备份的速度。

然后再执行以下命令,将文件push到Github:

1
2
3
4
$ git add .
$ git commit -m "备份hexo blog"
$ git push origin master

这三行命令便是手动推送本地文件到Github的命令,我们接下来要做的是让Node.js监听到Hexo的deployAfter事件后自动执行上述命令。

安装shelljs模块

命令如下。

1
$ npm install --save shelljs

加入自动执行脚本

在Hexo根目录的scripts文件夹(没有就自己创建一个)下新建一个js文件,文件名随意。然后加入以下代码:

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
require('shelljs/global');

try {
hexo.on('deployAfter', function() {//当deploy完成后执行备份
run();
});
} catch (e) {
console.log("产生了一个错误<( ̄3 ̄)> !,错误详情为:" + e.toString());
}

function run() {
if (!which('git')) {
echo('Sorry, this script requires git');
exit(1);
} else {
echo("======================Auto Backup Begin===========================");
if (exec('git add --all').code !== 0) {
echo('Error: Git add failed');
exit(1);
}
if (exec('git commit -am "Form auto backup script\'s commit"').code !== 0) {
echo('Error: Git commit failed');
exit(1);
}
if (exec('git push origin master').code !== 0) {
echo('Error: Git push failed');
exit(1);

}
echo("==================Auto Backup Complete============================")
}
}

每次部署完成,后面会追加类似如下的输出:

1
2
3
4
5
6
7
8
9
======================Auto Backup Begin===========================
warning: LF will be replaced by CRLF in source/_posts/2021-04-08-自动备份Hexo源文件.md.
The file will have its original line endings in your working directory
[master 5180657] Form auto backup script's commit
1 file changed, 144 insertions(+)
create mode 100644 "source/_posts/2021-04-08-\350\207\252\345\212\250\345\244\207\344\273\275Hexo\346\272\220\346\226\207\344\273\266.md"
To https://github.com/YaoHuanyu/jcxyblog.git
fcd9cbe..5180657 master -> master
==================Auto Backup Complete============================

Hexo new 自动打开文档

在hexo中,我们常常使用hexo new命令来新建文章,期望每次hexo new "新的文档"时自动使用Markdown编辑器打开。

在scripts文件夹中创建一个js文件,添加以下代码:

1
2
3
4
5
var spawn = require('child_process').exec;

hexo.on('new', function(data){
spawn('start ' + data.path);
});

保存并退出脚本之后,在命令行中键入:

1
2
3
$ hexo new "自动打新文档测试"
INFO Validating config
INFO Created: D:\WorkSpace\Sty_C\jcxyblog\source\_posts\2021-04-08-自动打新文档测试.md