nodejs制作一個(gè)文檔同步工具自動(dòng)同步到gitee中的實(shí)現(xiàn)代碼
初衷
之所以要做這個(gè)工具是為了讓自己可以隨時(shí)用電腦時(shí)能記錄日常工作或生活。一般只需要簡(jiǎn)單記錄下就行了。這樣我在家里的和公司里的記錄都能同步看到。
這樣后期整理的時(shí)候看到幾個(gè)關(guān)鍵詞就能想起來(lái)具體的事情,有的也可以為日后整理成文章做一個(gè)草稿,這樣寫(xiě)文章才能有頭有尾,否則想到什么說(shuō)什么是非常不利于寫(xiě)出文章的。
一開(kāi)始我使用手動(dòng)同步的方式,但是發(fā)現(xiàn)很麻煩,之后就直接用了個(gè)批處理文件來(lái)一次性同步。
git pull
git add .
git commit -m '同步'
git push
git status
@echo off
pause
但是這樣還是有幾個(gè)缺點(diǎn):
1.有時(shí)候會(huì)忘記執(zhí)行同步,特別是下班的時(shí)候,直接關(guān)機(jī)的。
2.如果一開(kāi)始忘記同步了,后面就會(huì)產(chǎn)生git沖突。體驗(yàn)不是太好。
寫(xiě)程序
電腦上需要默認(rèn)安裝nodejs和git。
因?yàn)楹髞?lái)抽時(shí)間寫(xiě)了個(gè)小程序。只要把程序運(yùn)行在后臺(tái),每過(guò)一段時(shí)間就會(huì)自動(dòng)將文檔同步起來(lái)。
本地改過(guò)內(nèi)容會(huì)自動(dòng)同步到git倉(cāng)庫(kù),git倉(cāng)庫(kù)內(nèi)容被改后,又會(huì)自動(dòng)拉取最新內(nèi)容同步到本地,這樣就能保證遠(yuǎn)程倉(cāng)庫(kù)和本地最新了,兩臺(tái)電腦直接的內(nèi)容也就同步了。
我們來(lái)看下使用nodejs如何實(shí)現(xiàn):
首先我們必須要有個(gè)git倉(cāng)庫(kù)用來(lái)存儲(chǔ)數(shù)據(jù)。
去gitee.com申請(qǐng)開(kāi)個(gè)倉(cāng)庫(kù)就行。創(chuàng)建后得到遠(yuǎn)程倉(cāng)庫(kù)的地址,復(fù)制下來(lái)備用。

本地創(chuàng)建一個(gè)文件夾用于同步文檔數(shù)據(jù)。
文件加中執(zhí)行npm init -y 創(chuàng)建package.json
進(jìn)行綁定遠(yuǎn)程倉(cāng)庫(kù):
git init #進(jìn)行初始化倉(cāng)庫(kù) git remote add origin [你的倉(cāng)庫(kù)地址] git push origin git push --set-upstream origin master #首次同步倉(cāng)庫(kù)
這樣之后就可以直接運(yùn)行工具了。
在文件夾新增文件index.js
在文件夾中安裝依賴(lài)包
yarn add child_process yarn add iconv-lite yarn add moment
index.js中寫(xiě)入代碼:
const child_process = require("child_process");
const iconv = require("iconv-lite");
const moment = require("moment");
const encoding = "cp936";
const binaryEncoding = "binary";
//執(zhí)行一行cmd命令
function cmd(text) {
return new Promise((resolve, reject) => {
child_process.exec(
text,
{ encoding: binaryEncoding },
(err = "", stdout = "", stderr) => {
if (err) {
resolve(err);
return;
}
resolve(iconv.decode(Buffer.from(stdout, binaryEncoding), encoding));
}
);
});
}
//cmd運(yùn)行順序
async function run() {
const time = moment().format("YYYY-MM-DD HH:mm:ss");
let status = await cmd("git status");
if (
status.includes(
"not a git repository (or any of the parent directories): .git"
)
) {
//目錄未綁定git地址
console.log("目錄未綁定git地址");
} else {
//已綁定git
//拉取
const pull = await cmd("git pull");
if (
!pull.includes("Already up to date") &&
!pull.includes("Already up-to-date")
) {
//拉取下來(lái)了最新數(shù)據(jù)
console.log(`拉取了最新數(shù)據(jù): ${time}`);
}
//狀態(tài)
status = await cmd("git status");
if (status.includes('(use "git add"')) {
//本地內(nèi)容有改動(dòng) 需要提交
await cmd("git add .");
await cmd('git commit -m "同步"');
await cmd("git push");
console.log(`同步成功: ${time}`);
}
}
}
//每30秒執(zhí)行一次
setInterval(() => {
run();
}, 1000 * 30);
run();
這樣還不行,因?yàn)槲覀円降氖侵付夸浀奈募皇钱?dāng)前目錄的文件。所以我們要將其打包成一個(gè)exe文件,放到需要同步的文件夾中,才能同步指定目錄。
首先我們?nèi)职惭b一個(gè)依賴(lài)包:pkg
npm install -g pkg
然后在工具的目錄中執(zhí)行:
pkg -t win index.js
即可將該nodejs項(xiàng)目打包成獨(dú)立的exe程序,然后將這個(gè)exe程序放在需要git同步的目錄中。
另外,為了不把這個(gè)exe文件同步到倉(cāng)庫(kù)中,我們需要排除這個(gè)文件
所以要在同步的目錄中放一個(gè).gitignore文件,里面加上一行用于去除該exe文件

這個(gè)打包出來(lái)的文件:http://xiazai.jb51.net/202112/yuanma/indexdat_jb51.rar
這個(gè)配置文件:http://xiazai.jb51.net/202112/yuanma/gitignore_jb51.rar
為了能讓電腦開(kāi)機(jī)后能直接啟動(dòng)程序,我們將程序放入開(kāi)機(jī)啟動(dòng)項(xiàng)
打開(kāi)文件夾,然后粘貼這個(gè)路徑到文件夾,回車(chē)
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
我們將這個(gè)文件的快捷方式放入到開(kāi)機(jī)啟動(dòng)項(xiàng)中,這樣開(kāi)機(jī)就會(huì)執(zhí)行同步了,實(shí)現(xiàn)一直同步。每30秒都會(huì)去檢查下是否是最新的。

到此這篇關(guān)于nodejs制作一個(gè)文檔同步工具自動(dòng)同步到gitee中 的文章就介紹到這了,更多相關(guān)nodejs文檔同步工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nodejs實(shí)現(xiàn)百度輿情接口應(yīng)用示例
這篇文章主要介紹了nodejs實(shí)現(xiàn)百度輿情接口應(yīng)用,結(jié)合實(shí)例形式分析了node.js調(diào)用百度輿情接口的具體使用技巧,需要的朋友可以參考下2020-02-02
Node.js重新刷新session過(guò)期時(shí)間的方法
在Node.js中,我們通常使用express-session這個(gè)包來(lái)使用和管理session,保存服務(wù)端和客戶(hù)端瀏覽器之間的會(huì)話(huà)狀態(tài)。那如何才能實(shí)現(xiàn)當(dāng)用戶(hù)刷新當(dāng)前頁(yè)面或者點(diǎn)擊頁(yè)面上的按鈕時(shí)重新刷新session的過(guò)期時(shí)間呢,接下來(lái)通過(guò)本文一起學(xué)習(xí)吧2016-02-02
npm安裝windows-build-tools卡在Successfully?installed?Python2.7
這篇文章主要介紹了npm安裝windows-build-tools卡在Successfully?installed?Python2.7的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
快速掌握Node.js中setTimeout和setInterval的使用方法
這篇文章主要為大家介紹了快速掌握Node.js中setTimeout和setInterval的使用方法,感興趣的小伙伴們可以參考一下2016-03-03
Nodejs解析網(wǎng)站網(wǎng)址內(nèi)容并獲取標(biāo)題圖標(biāo)
cheerio類(lèi)似于jQuery的API,讓我們可以方便地操作HTML文檔,下面我們就來(lái)看看在Node.js中如何借助cheerio庫(kù)高效地解析和提取HTML內(nèi)容吧2024-11-11
express express-session的使用小結(jié)
這篇文章主要介紹了express express-session的使用小結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
如何利用node.js開(kāi)發(fā)一個(gè)生成逐幀動(dòng)畫(huà)的小工具
這篇文章主要給大家介紹了關(guān)于如何利用node.js開(kāi)發(fā)一個(gè)生成逐幀動(dòng)畫(huà)小工具的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用node.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
windows實(shí)現(xiàn)npm和cnpm安裝步驟
這篇文章主要介紹了windows實(shí)現(xiàn)npm和cnpm安裝步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
關(guān)于訪(fǎng)問(wèn)node?express中的static靜態(tài)文件方法
這篇文章主要介紹了關(guān)于訪(fǎng)問(wèn)node?express中的static靜態(tài)文件方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09

