耀极客论坛

 找回密码
 立即注册
查看: 849|回复: 0

nodejs制作一个文档同步工具自动同步到gitee中的实现代码

[复制链接]

1630

主题

1517

回帖

22万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
229090
发表于 2022-5-8 02:41:35 | 显示全部楼层 |阅读模式
  这篇文章主要介绍了nodejs制作一个文档同步工具自动同步到gitee中,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
初衷
  之所以要做这个工具是为了让自己可以随时用电脑时能记录日常工作或生活。一般只需要简单记录下就行了。这样我在家里的和公司里的记录都能同步看到。
  这样后期整理的时候看到几个关键词就能想起来具体的事情,有的也可以为日后整理成文章做一个草稿,这样写文章才能有头有尾,否则想到什么说什么是非常不利于写出文章的。
  一开始我使用手动同步的方式,但是发现很麻烦,之后就直接用了个批处理文件来一次性同步。
  1. git pull
  2. git add .
  3. git commit -m '同步'
  4. git push
  5. git status
  6. @echo off
  7. pause
复制代码
  但是这样还是有几个缺点:
  1.有时候会忘记执行同步,特别是下班的时候,直接关机的。
  2.如果一开始忘记同步了,后面就会产生git冲突。体验不是太好。
写程序
  电脑上需要默认安装nodejs和git。
  因为后来抽时间写了个小程序。只要把程序运行在后台,每过一段时间就会自动将文档同步起来。
  本地改过内容会自动同步到git仓库,git仓库内容被改后,又会自动拉取最新内容同步到本地,这样就能保证远程仓库和本地最新了,两台电脑直接的内容也就同步了。
  我们来看下使用nodejs如何实现:
  首先我们必须要有个git仓库用来存储数据。
  去gitee.com申请开个仓库就行。创建后得到远程仓库的地址,复制下来备用。

  本地创建一个文件夹用于同步文档数据。
  文件加中执行npm init -y 创建package.json
  进行绑定远程仓库:
  1. git init  #进行初始化仓库
  2. git remote add origin [你的仓库地址]
  3. git push origin
  4. git push --set-upstream origin master  #首次同步仓库
复制代码
  这样之后就可以直接运行工具了。
  在文件夹新增文件index.js
  在文件夹中安装依赖包
  1. yarn add child_process
  2. yarn add iconv-lite
  3. yarn add moment
复制代码
  index.js中写入代码:
  1. const child_process = require("child_process");
  2. const iconv = require("iconv-lite");
  3. const moment = require("moment");
  4. const encoding = "cp936";
  5. const binaryEncoding = "binary";
  6. //执行一行cmd命令
  7. function cmd(text) {
  8.   return new Promise((resolve, reject) => {
  9.     child_process.exec(
  10.       text,
  11.       { encoding: binaryEncoding },
  12.       (err = "", stdout = "", stderr) => {
  13.         if (err) {
  14.           resolve(err);
  15.           return;
  16.         }
  17.         resolve(iconv.decode(Buffer.from(stdout, binaryEncoding), encoding));
  18.       }
  19.     );
  20.   });
  21. }
  22. //cmd运行顺序
  23. async function run() {
  24.   const time = moment().format("YYYY-MM-DD HH:mm:ss");
  25.   let status = await cmd("git status");
  26.   if (
  27.     status.includes(
  28.       "not a git repository (or any of the parent directories): .git"
  29.     )
  30.   ) {
  31.     //目录未绑定git地址
  32.     console.log("目录未绑定git地址");
  33.   } else {
  34.     //已绑定git
  35.     //拉取
  36.     const pull = await cmd("git pull");
  37.     if (
  38.       !pull.includes("Already up to date") &&
  39.       !pull.includes("Already up-to-date")
  40.     ) {
  41.       //拉取下来了最新数据
  42.       console.log(`拉取了最新数据: ${time}`);
  43.     }
  44.     //状态
  45.     status = await cmd("git status");
  46.     if (status.includes('(use "git add"')) {
  47.       //本地内容有改动 需要提交
  48.       await cmd("git add .");
  49.       await cmd('git commit -m "同步"');
  50.       await cmd("git push");
  51.       console.log(`同步成功: ${time}`);
  52.     }
  53.   }
  54. }
  55. //每30秒执行一次
  56. setInterval(() => {
  57.   run();
  58. }, 1000 * 30);
  59. run();
复制代码
  这样还不行,因为我们要同步的是指定目录的文件,不是当前目录的文件。所以我们要将其打包成一个exe文件,放到需要同步的文件夹中,才能同步指定目录。
  首先我们全局安装一个依赖包:pkg
  1. npm install -g pkg
复制代码
  然后在工具的目录中执行:
  1. pkg -t win index.js
复制代码
  即可将该nodejs项目打包成独立的exe程序,然后将这个exe程序放在需要git同步的目录中。
  另外,为了不把这个exe文件同步到仓库中,我们需要排除这个文件
  所以要在同步的目录中放一个.gitignore文件,里面加上一行用于去除该exe文件

  这个打包出来的文件:http://xiazai.jb51.net/202112/yuanma/indexdat_jb51.rar
  这个配置文件:http://xiazai.jb51.net/202112/yuanma/gitignore_jb51.rar
  为了能让电脑开机后能直接启动程序,我们将程序放入开机启动项
  打开文件夹,然后粘贴这个路径到文件夹,回车
  1. %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
复制代码
  我们将这个文件的快捷方式放入到开机启动项中,这样开机就会执行同步了,实现一直同步。每30秒都会去检查下是否是最新的。

  到此这篇关于nodejs制作一个文档同步工具自动同步到gitee中 的文章就介绍到这了,更多相关nodejs文档同步工具内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|耀极客论坛 ( 粤ICP备2022052845号-2 )|网站地图

GMT+8, 2023-3-24 13:49 , Processed in 0.069918 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表