一钝域、前言
自從接觸了Hexo+NexT之后讽坏,發(fā)現(xiàn)離不開了,以后有能力的時候一定重新架構(gòu)一下例证,使得更加個性化路呜,最大程度的滿足我們對于軟件的需求,大家都知道,如果寫東西在本地的話胀葱,最怕的應(yīng)該就是更換電腦漠秋,還要重新搭建博客了,所以備份對于我們來說特別重要抵屿!備份博客就是本篇博客文章的主旨了庆锦,一定要攻下這座城堡。
我曾經(jīng)看過Git備份Hexo博客源文件的方式轧葛,這種方式雖然能夠備份Hexo博客的源文件搂抒,但是對于我這種懶人,每次更新博文都需要輸入兩三行重復(fù)的Git命令真是一件麻煩的事情尿扯。況且指不定哪天就搞忘push到github上了燕耿。你說是不是,所以這篇文章出現(xiàn)了……
二姜胖、原理
通過監(jiān)聽Hexo的事件來完成自動執(zhí)行Git命令進(jìn)行自動備份,查閱Hexo文檔淀散,找到了Hexo的主要事件右莱,見下表:
事件名 | 事件發(fā)生時間 |
---|---|
deployBefore | 在部署完成前發(fā)布 |
deployAfter | 在部署成功后發(fā)布 |
exit | 在 Hexo 結(jié)束前發(fā)布 |
generateBefore | 在靜態(tài)文件生成前發(fā)布 |
generateAfter | 在靜態(tài)文件生成后發(fā)布 |
new | 在文章文件建立后發(fā)布 |
于是我們就可以通過監(jiān)聽Hexo的deployAfter
事件,待上傳完成之后自動運(yùn)行Git備份命令档插,從而達(dá)到自動備份的目的慢蜓。
三、實現(xiàn)
1.將Hexo目錄加入Git倉庫
本腳本需要提前將Hexo加入Git倉庫并與Github或者Gitee遠(yuǎn)程倉庫綁定之后郭膛,才能正常工作晨抡。如果你不知道該怎樣進(jìn)行操作,可以參考我的另一篇博文:
2.安裝shelljs
模塊
要實現(xiàn)這個自動備份功能则剃,需要依賴NodeJs的一個shelljs模塊,該模塊重新包裝了child_process,調(diào)用系統(tǒng)命令更加的方便耘柱。(其實就是因為我懶( ╯▽╰))該模塊需要安裝后使用。
在命令中鍵入以下命令棍现,完成shelljs模塊的安裝:
npm install --save shelljs
3.編寫自動備份腳本
shelljs
模塊安裝完成后调煎,在Hexo
根目錄的scripts
文件夾下新建一個js文件,文件名隨意取(我的文件名為:auto_backup.js
)己肮。如果沒有scripts
目錄士袄,請新建一個。
然后在腳本中谎僻,寫入以下內(nèi)容:
require('shelljs/global');
try {
hexo.on('deployAfter', function() {//當(dāng)deploy完成后執(zhí)行備份
run();
});
} catch (e) {
console.log("產(chǎn)生了一個錯誤啊<( ̄3 ̄)> !娄柳,錯誤詳情為:" + e.toString());
}
function run() {
if (!which('git')) {
echo('Sorry, this script requires git');
exit(1);
} else {
echo("======================Auto Backup Begin===========================");
cd('E:/work/myblog'); //此處修改為Hexo根目錄路徑
if (exec('git add --all').code !== 0) {
echo('Error: Git add failed');
exit(1);
}
if (exec('git commit -am "blog 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============================")
}
}
其中,需要修改第16行的E:/work/myblog路徑為Hexo的根目錄路徑艘绍。(腳本中的路徑為博主的Hexo路徑)
如果你的Git遠(yuǎn)程倉庫名稱不為origin的話赤拒,還需要修改第25行執(zhí)行的push命令,修改成自己的遠(yuǎn)程倉庫名和相應(yīng)的分支名。
4.測試結(jié)果
保存腳本并退出需了,然后執(zhí)行hexo d
命令跳昼,在常規(guī)結(jié)果執(zhí)行出來后,將會得到類似以下結(jié)果:
這樣子就表明成功上傳啦肋乍,每次更新博文并deploy到服務(wù)器上之后鹅颊,備份就自動啟動并完成備份啦~
查看github鏡像庫,如下圖所示墓造,得到了想要的東西:
測試成功堪伍!
很開心,以后就可以自動備份Hexo博客源文件托管在Github上啦觅闽,嘿嘿嘿帝雇!