自動備份Hexo源文件

前言

配置一個Hexo博客往往需要作者傾注大量心血,而如果哪天電腦壞了或者換電腦導致Hexo源文件丟失的話就是一件比較杯具的事。因此本文給出了一種自動備份Hexo源文件到Github的方法,能夠在執行hexo deploy命令後自動執行Git命令以推送Hexo源文件到Github倉庫。

原理

NodeJS的事件監聽機制能夠監聽Hexo的事件。通過查詢Hexo文檔,找到了Hexo的主要事件,見下表:

事件名 描述
deployBefore 在部署完成前發佈。
deployAfter 在部署成功後發佈。
exit Hexo 結束前發佈。
generateBefore 在靜態文件生成前發佈。
generateAfter 在靜態文件生成後發佈。
new 在文章文件建立後發佈。該事件返回文章參數。
processBefore 在處理原始文件前發佈。此事件會返回一個地址,代表 Box(Box)的根目錄。
processAfter 在原始文件處理後發佈。此事件會返回一個地址,代表 Box(Box)的根目錄。
ready 在初始化完成後發佈。

通過查詢上表發現,我們可以通過監聽HexodeployAfter事件,待部署成功後自動運行Git備份命令,從而達到自動備份的目的。

實現

Hexo目錄加入Git倉庫

首先需要在Github創建一個新的repository,名字與本地Hexo文件夾同名即可。然後進入本地Hexo文件夾,按順序執行以下命令:

git init
git remote add origin git@github.com:yourname/hexo.git
git pull origin master

再每次執行hexo generate命令時,public/.deploy*.log文件夾會重寫更新,因此需要在.gitignore文件(如果沒有,手動創建一個)中寫入public/.deploy*.log以忽略這幾個目錄,加快備份的速度。

然後再順序執行以下命令,將文件推送到Github

git add .
git commit -m "備份hexo源碼文件"
git push origin master

這三行命令便是手動推送本地文件到Github的命令,我們接下來要做的是讓NodeJS監聽到HexodeployAfter事件後自動執行上述命令。

安裝shelljs模塊

鍵入以下命令即可

npm install --save shelljs
加入自動執行腳本

Hexo根目錄的scripts文件夾(沒有就自己創建一個)下新建一個js文件,文件名隨意。然後加入以下代碼:

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===========================");
		cd('path to hexo');    //此處修改爲Hexo根目錄路徑
		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============================")
	}
}

注意上述代碼中第29行需要修改爲自己Hexo文件夾的絕對路徑。

效果

如果腳本運行成功,會得到類似以下的效果:


======================Auto Backup Begin===========================
cd: no such file or directory: ‪C:/Users/17810/OneDrive/hexo
warning: LF will be replaced by CRLF in source/_posts/自動備份Hexo源文件.md.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in source/_posts/自動備份Hexo源文件.md.
The file will have its original line endings in your working directory.
[master a6cb4c7] Form auto backup script's commit
 1 file changed, 153 insertions(+)
warning: LF will be replaced by CRLF in source/_posts/自動備份Hexo源文件.md.
The file will have its original line endings in your working directory.
To [email protected]:JacobZjw/hexo.git
   0beaf4c..a6cb4c7  master -> master
==================Auto Backup Complete============================

懶癌患者的小福利

hexo中,我們常常使用hexo new命令來新建文章。然鵝,當我們的文章較多時,我們往往需要在成堆的文章中找到剛剛生成的文件,然後使用Markdown編輯器打開。作爲一名懶癌患者怎麼可能讓自己如此受累。

於是,我找到了Hexo作者給出的解決辦法

和上面類似,在scripts文件夾中創建一個js文件,添加以下代碼:

var spawn = require('child_process').exec;

// Hexo 2.x 用戶複製這段
hexo.on('new', function(path){
  spawn('start  "markdown編輯器絕對路徑.exe" ' + path);
});

// Hexo 3 用戶複製這段
hexo.on('new', function(data){
  spawn('start  "markdown編輯器絕對路徑.exe" ' + data.path);
});

保存並退出腳本之後,在命令行中鍵入:

hexo new "auto open editor test"

是不是就順利的自動打開了自動生成的md文件啦~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章