推荐一个同步两地代码的东西

发布于 · 最后修改时间

以前开发,是使用金山快盘,但是这软件停止了维护。后来就没用了。
这个同步需求发生在最近写Typescript的时候,感觉本地编译很吃CPU,有时候浏览器开着运行Canvas就要吃掉我双核四线程60%+的CPU了,这时候再编译Typescript,搞得两边都很卡。
所以就想着能不能用另外一台电脑单纯替代我本地的编译这一方面的工作。

一开始的想法是自己写一个服务同步两台电脑的脚本,后来想想预感会踩很多坑,所以就果断放弃这个想法, Google搜不出我要的软件,就上Github搜索了以下,结果就找到了这个:syncthing

跑起来后试用感觉很不错,唯一的不满就是,它是以轮询的方式来查看文件变动。不过开源软件给出API,所以就写了一个nodejs脚本来自动触发同步选项。

代码下面贴出,我默认是放在代码所在目录下:

// .syncthing.js
const fs = require("fs");
const child_process = require("child_process");
var ignore_keys = ["/ace", "/js/lib", "/typings"]; // 不参与监听的,注意这里不是目录,只是简单的字符串匹配,也就是说如果目录名有这个字符串的话就不监听。
var watch_deep = 4; // 监听的目录深度,int > 1。为了缩减代码所以就没有用fs的API
var watch_dirs = ["./"];
var ls_exec = "ls -d .";// 如果你的代码目录不深,或者需要监听所有的目录,可以直接用ls -R,不过你要自己编写代码处理输出的格式,这里不赘述(PS:我就是偷懒不想多写代码)
do {
ls_exec += "/*";
var dirs = child_process.execSync(ls_exec).toString().split('\n').filter(foldername => {
if (foldername) {
if (ignore_keys.some(ignore_key => foldername.indexOf(ignore_key) !== -1)) {
return false
}
return fs.lstatSync(foldername).isDirectory();
}
});
watch_dirs = watch_dirs.concat(dirs);
} while (watch_deep -= 1);
console.log(`监听以下目录:\n ${watch_dirs.join("\n ").trim()}`);

const syncthing_exec_server = `curl -X POST -H "X-API-Key:Tqp***********到设置中找******und" http://[服务端或者局域网IP,记得到设置中设置]:8384/rest/db/scan?folder=[文件夹 ID]`;
const syncthing_exec_client = `curl -X POST -H "X-API-Key:E5x***********到设置中找*****7o5J" http://localhost:8384/rest/db/scan?folder=[文件夹 ID]`;
var is_server = process.argv[2] || "";
if (is_server.toLowerCase()[0] === "s") {
console.log("启用服务端同步指令");
var syncthing_exec = syncthing_exec_server
} else {
console.log("启用客户端同步指令");
syncthing_exec = syncthing_exec_client
}
watch_dirs.forEach(dir => {
fs.watch(dir, (event, filename) => {
console.log(event, filename);
child_process.execSync(syncthing_exec);
});
});

准备工作做好后就可以,剩下要做的就是:
1, 开启_客户端_和_编译端_的syncthing
2. 运行上面的代码:node .syncthing.js
3. 编译端启动编译:运行tsc -w -p .。或者你可以执行自己的sass编译等等类似的烧CPU工作。