前言
配置一個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 |
在初始化完成後發佈。 |
通過查詢上表發現,我們可以通過監聽Hexo
的deployAfter
事件,待部署成功後自動運行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
監聽到Hexo
的deployAfter
事件後自動執行上述命令。
安裝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文件啦~