文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

初衷

之所以要做这个工具是为了让自己可以随时用电脑时能记录日常工作或生活。一般只需要简单记录下就行了。这样我在家里的和公司里的记录都能同步看到。

这样后期整理的时候看到几个关键词就能想起来具体的事情,有的也可以为日后整理成文章做一个草稿,这样写文章才能有头有尾,否则想到什么说什么是非常不利于写出文章的。

一开始我使用手动同步的方式,但是发现很麻烦,之后就直接用了个批处理文件来一次性同步。

git pull

git add .

git commit -m '同步'

git push

git status

@echo off

pause

但是这样还是有几个缺点:

1.有时候会忘记执行同步,特别是下班的时候,直接关机的。

2.如果一开始忘记同步了,后面就会产生git冲突。体验不是太好。

写程序

电脑上需要默认安装nodejs和git。

因为后来抽时间写了个小程序。只要把程序运行在后台,每过一段时间就会自动将文档同步起来。

本地改过内容会自动同步到git仓库,git仓库内容被改后,又会自动拉取最新内容同步到本地,这样就能保证远程仓库和本地最新了,两台电脑直接的内容也就同步了。

我们来看下使用nodejs如何实现:

首先我们必须要有个git仓库用来存储数据。

去gitee.com申请开个仓库就行。创建后得到远程仓库的地址,复制下来备用。

本地创建一个文件夹用于同步文档数据。

文件加中执行npm init -y 创建package.json

进行绑定远程仓库:


git init  #进行初始化仓库
git remote add origin [你的仓库地址] 
git push origin 
git push --set-upstream origin master  #首次同步仓库

这样之后就可以直接运行工具了。

在文件夹新增文件index.js

在文件夹中安装依赖包


yarn add child_process
yarn add iconv-lite
yarn add moment

index.js中写入代码:


const child_process = require("child_process");
const iconv = require("iconv-lite");
const moment = require("moment");

const encoding = "cp936";
const binaryEncoding = "binary";

//执行一行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运行顺序
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")
    ) {
      //拉取下来了最新数据
      console.log(`拉取了最新数据: ${time}`);
    }
    //状态
    status = await cmd("git status");
    if (status.includes('(use "git add"')) {
      //本地内容有改动 需要提交
      await cmd("git add .");
      await cmd('git commit -m "同步"');
      await cmd("git push");
      console.log(`同步成功: ${time}`);
    }
  }
}

//每30秒执行一次
setInterval(() => {
  run();
}, 1000 * 30);
run();

这样还不行,因为我们要同步的是指定目录的文件,不是当前目录的文件。所以我们要将其打包成一个exe文件,放到需要同步的文件夹中,才能同步指定目录。

首先我们全局安装一个依赖包:pkg


npm install -g pkg

然后在工具的目录中执行:


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

为了能让电脑开机后能直接启动程序,我们将程序放入开机启动项

打开文件夹,然后粘贴这个路径到文件夹,回车

%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

我们将这个文件的快捷方式放入到开机启动项中,这样开机就会执行同步了,实现一直同步。每30秒都会去检查下是否是最新的。

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯