利用Node的chokidar 监听文件改变的文件。
最近维护一个项目。每次改完东西,都要上传到服务器。然后有时候就忘记一些东西,于是就想有没有可以方法能监听文件的改变。然后我再利用程序把更改的文件一键上传到服务器。
于是就找到了nodejs 的chokidar模块。 然后利用redis的set集合。因为我们频繁更改。如果用普通的字符 会增加比较。set是一个集合,里面的元素都是不重复的。正好可以利用这个特性。帮我们记录更改的记录文件。删除的时候,然后删掉set中的文件。目前只做了增加或修改的文件提交,如果本地删除的 不会同步到服务器。
监听本地文件的代码如下
const chokidar = require('chokidar')
const redis = require("redis"),
client = redis.createClient();
let watcher = null
let ready = false
const key = "modifyFiles";
let watch = function (filepath) {
// 文件新增时
function addFileListener(path_) {
if (ready) {
client.sadd(key,path_);
console.log('文件', path_, 'has been added')
}
}
function addDirecotryListener(path_) {
if (ready) {
console.log('目录', path_, 'has been added')
}
}
// 文件内容改变时
function fileChangeListener(path_) {
client.sadd(key,path_);
console.log('文件', path_, '已经修改')
}
// 删除文件
function fileRemovedListener(path_) {
client.srem(key,path_)
console.log('文件', path_, '被删除了')
}
// 删除目录时
function directoryRemovedListener(path_) {
console.info('目录', path_, '被删除了')
}
if (!watcher) {
watcher = chokidar.watch(filepath)
}
watcher
.on('add', addFileListener)
.on('addDir', addDirecotryListener)
.on('change', fileChangeListener)
.on('unlink', fileRemovedListener)
.on('unlinkDir', directoryRemovedListener)
.on('error', function (error) {
console.info('发生了错误:', error);
})
.on('ready', function () {
console.info('准备监听');
ready = true
})
}
watch("E:\\work\\www.cccc.com\\")
上传到服务器
上传到服务器:我们需要读取set集合中的数据,然后将本地的目录和远程目录映射,利用sftp传输到指定的文件。代码如下
var path, fs, redis, client, node_ssh, ssh
node_ssh = require('node-ssh')
ssh = new node_ssh()
fs = require('fs')
path = require('path')
redis = require("redis")
client = redis.createClient() //redis 集合key
const key = "modifyFiles"; //远程目录
const remote_path = "/home/wwwroot/www.ccc.com/"; //本地目录
const local_path = "E:/work/www.ccc.com/" let uploadFiles = [{
"local": "",
"remote": ""
}]; //远程server信息
const serverConfig = {
host: 'x.x.x.x',
username: 'admin',
password: 'admin',
port: 22
}
//读取redis中的set
client.smembers(key, (error, data)=> {
if (error == true) {
return
} //链接ssh
ssh.connect(serverConfig)
.then(() => { if(data.length == 0) {
return
} // 组装数据
data.map(function(item, index){
let path = item.replace(/\\/g, "/");
let temp = {
local: path,
remote: path.replace(local_path, remote_path)
}
uploadFiles[index] = temp;
}) //上传文件
ssh.putFiles(uploadFiles).then(function () {
console.log("文档上传成功了!!!!")
client.srem(key,data)
}, function (error) {
console.log(error)
}) }) })
利用Node的chokidar 监听文件改变的文件。的更多相关文章
- Oracle LISTENER 主机名修改为IP地址后LISTENER无法监听到实例 oracle监听错误与hosts文件配置
为什么listener.ora文件里面HOST后面到底应该输入IP地址还是主机名.我的经验告诉我,这边最好使用主机名.很多的时候,一个机器绑定的不只一个IP地址,如HOST后面是IP地址,那么ORAC ...
- 实时监听 JavaScript改变 input 值 input输入框内容 value 变化实时监听
思路:通过setInterval()方法去定时对比新旧值 当时候JavaScript的onchange 和onpropertychange(注意ie版本) 监听输入框input时间,人为改变值是可以触 ...
- 监听 input上传文件, 获取文件名称,
<div class="import-box pr" > <span class="model-address-txt">导入文件:&l ...
- android菜鸟学习笔记23----ContentProvider(三)利用内置ContentProvider监听短信及查看联系人
要使用一个ContentProvider,必须要知道的是它所能匹配的Uri及其数据存储的表的结构. 首先想办法找到访问短信及联系人数据的ContentProvider能接受的Uri: 到github上 ...
- node.js绑定监听事件EventEmitter类
Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件,如下: // 引入 events 模块 var events = r ...
- 利用spring的ApplicationListener监听某一类事件的发生
1.ApplicationListener在使用过程中可以监听某一事件的发生,可以做出相应的处理,这个方式不常用,但是在特殊情况下面还是有用的. 2.导包pom.xml <project xml ...
- 利用bootstrap制作滚动监听
滚动监听(Scrollspy)插件,即自动更新导航插件,会根据滚动条的位置自动更新对应的导航目标. 在这里,需要引入三个文件:bootstrap.min.css jquery-3.3.1.j ...
- 20180530利用Maxwell组件实时监听Mysql的binlog日志
转自:https://blog.csdn.net/qq_30921461/article/details/78320750 http://kafka.apache.org/quickstart htt ...
- C# 利用socekt做到http监听,怎么样才能做到高性能
c#原始提供了http的监听的类HttpListener,实现了简单的http.文章地址<C# 控制台或者winform程序开启http的监听状态> 但是经过我测试,这个HttpListe ...
随机推荐
- BZOJ2820:YY的GCD
Sol 推导:\(n<m,p为质数\) \(ans=\sum_p\sum_{i=1}^{\frac{n}{p}}\mu(i)\frac{n}{pi}\frac{m}{pi}\) \(=\sum_ ...
- WC2006水管局长(加强)
倒过来就变成了加边 然后就直接LCT # include <stdio.h> # include <stdlib.h> # include <iostream> # ...
- MongoDB存储引擎(中)——WiredTiger
上一篇博文介绍了MongoDB的MMAPv1存储引擎,本文接着介绍MongoDB另一个存储引擎--WiredTiger,WiredTiger是在MongoDB3.0版本引入的,并且在MongoDB3. ...
- 关于使用Ajax请求json数据,@RequestMapping返回中文乱码的几种解决办法
一.问题描述: 使用ajax请求json数据的时候,无论如何返回的响应编码都是ISO-8859-1类型,因为统一都是utf-8编码,导致出现返回结果中文乱码情况. $.ajax({ type:&quo ...
- Django---视图
全过程:用户填写相关数据,提交相关请求,链接到对应的视图上,在此视图上(有用户传过来的数据[就是视图要处理的数据],在视图里面对数据进行业务处理,在数据库中crub数据,然后把对应的界面和界面显示需要 ...
- python写一个信息收集四大件的脚本
0x0前言: 带来一首小歌: 之前看了小迪老师讲的课,仔细做了些笔记 然后打算将其写成一个脚本. 0x01准备: requests模块 socket模块 optparser模块 time模块 0x02 ...
- C#中的多线程与线程互斥
通过多线程,C#可以并行地执行代码. 每一个线程都有它独立的执行路径,所有线程都能访问共有变量. 这就引发了线程竞争 这时就需要使用线程安全的处理方式使得线程互斥 先来看一段多线程代码 using S ...
- canvas画布,时钟
原理代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- Online Judge(OJ)搭建——3、MVC架构
Model Model 层主要包含数据的类,这些数据一般是现实中的实体,所以,Model 层中类的定义常常和数据库 DDL 中的 create 语句类似. 通常数据库的表和类是一对一的关系,但是有的时 ...
- 我的linux学习之路--(二)linux常用命令
1.date 时间管理 电脑主板有电池,所有电脑断电时间正确,rtc linux:rtc 硬件时钟 clock/hwclock 系统时钟(linux操作系统用软件模拟震荡器计算)date看到就是 命令 ...