前言 为了避免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 ( ) { 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