使用Node.JS监听文件夹变化
使用Node.JS监听文件夹改变有许多应用场合,比如:
构建自动编绎工具
当源文件改变时,自动运行build过程,比如当你写CoffeeScript文件或SASS CSS文件时,保存之后可即时生成对应的JS或CSS.
构建自动布署工具
通过侦听源文件夹的改变,你可以自动即时将改后的文件布署到测试服务器,加快你的开发测试速度。
这些工具其实都需要侦听文件夹的改变,基于Node.JS的侦听文件夹改变的模块有很多。
fs.watch
其中Node.JS的文件系统也可侦听某个目录的改变, 如fs.watch
fs.watch('somedir', function (event, filename) {
console.log('event is: ' + event);
if (filename) {
console.log('filename provided: ' + filename);
} else {
console.log('filename not provided');
}
});
其中fs.watch的最大缺点就是不支持子文件夹的侦听,并且在很多情况下会侦听到两次事件(很多编辑器在保存的时侯是先把原文件清空,再进行保存,因此会触发两次文件夹改变事件)。因此需要一些开源的模块来监听文件夹目录的改变。
chokidar
chokidar 是一个基于node.JS的监听文件夹改变模块。
安装
npm install chokidar
示例
var chokidar = require('chokidar');
var watcher = chokidar.watch('file, dir, or glob', {
ignored: /[\/\\]\./, persistent: true
});
var log = console.log.bind(console);
watcher
.on('add', function(path) { log('File', path, 'has been added'); })
.on('addDir', function(path) { log('Directory', path, 'has been added'); })
.on('change', function(path) { log('File', path, 'has been changed'); })
.on('unlink', function(path) { log('File', path, 'has been removed'); })
.on('unlinkDir', function(path) { log('Directory', path, 'has been removed'); })
.on('error', function(error) { log('Error happened', error); })
.on('ready', function() { log('Initial scan complete. Ready for changes.'); })
.on('raw', function(event, path, details) { log('Raw event info:', event, path, details); })
watch
Watch 是另一个监听文件夹改变的Node.JS模块
安装
npm install watch
npm install watch
示例,侦听所有改变事件
watch.watchTree('/home/mikeal', function (f, curr, prev) {
if (typeof f == "object" && prev === null && curr === null) {
// Finished walking the tree
} else if (prev === null) {
// f is a new file
} else if (curr.nlink === 0) {
// f was removed
} else {
// f was changed
}
})
示例,侦听不同事件
var watch = require('watch')
watch.createMonitor('/home/mikeal', function (monitor) {
monitor.files['/home/mikeal/.zshrc'] // Stat object for my zshrc.
monitor.on("created", function (f, stat) {
// Handle new files
})
monitor.on("changed", function (f, curr, prev) {
// Handle file changes
})
monitor.on("removed", function (f, stat) {
// Handle removed files
})
monitor.stop(); // Stop watching
})
使用Node.JS监听文件夹变化的更多相关文章
- nodejs 监听文件夹变化的模块
使用Node.JS监听文件夹变化 fs.watch 其中Node.JS的文件系统也可侦听某个目录的改变, 如fs.watch 其中fs.watch的最大缺点就是不支持子文件夹的侦听,并且在很多情况 ...
- node.js监听文件变化
前言 随着前端技术的飞速发展,前端开发也从原始的刀耕火种,向着工程化效率化的方向发展.在各种开发框架之外,打包编译等技术也是层出不穷,开发体验也是越来越好.例如HMR,让我们的更新可以即时可见,告别了 ...
- c# 监听文件夹动作
static FileSystemWatcher watcher = new FileSystemWatcher(); /// <summary> /// 初始化监听 ...
- JS监听输入框值变化兼容 onpropertychange、oninput
onpropertychange 属IE oninput 属除IE外(Chrome.Firefox.SS) 所以肯简单的办法嘛: 1. 一个input里面写两个属性事件 2.写在JS中判断浏览器添加监 ...
- node.js 递归复制文件夹(附带文件过滤功能)
1.简介: 很简单,写了一个node操作文件的小脚本,主要实现对目标文件夹中内容的复制.还顺带一个按照文件夹或者文件名过滤的功能. 2.应用场景 适合基于 node 环境的项目,项目打包的时候,配合 ...
- Java_监听文件夹或者文件是否有变动
package org.testWatch.Watch; import java.nio.file.FileSystems; import java.nio.file.Path; import jav ...
- node.js 监听message事件 message字符串丢失信息
const dgram = require("dgram"); const server = dgram.createSocket("udp4"); serve ...
- kafka flumn sparkstreaming java实现监听文件夹内容保存到Phoenix中
ps:具体Kafka Flumn SparkStreaming的使用 参考前几篇博客 2.4.6.4.1 配置启动Kafka (1) 在slave机器上配置broker 1) 点击CDH上的kafk ...
- Node.js之删除文件夹(含递归删除)
应用场景:比如像Eclipse这样的IDE,右击项目,出现选项,点击选项中的删除,就可以删除这个项目及其下的子目录包含文件(使用electron开发的桌面端项目多少都会用到). 核心代码如下: /** ...
随机推荐
- 高通9X07模块QMI架构使用入门
QMI(Qualcomm Message Interface) 高通用来替代OneRPC/DM的协议,用来与modem通信.本文是摸索高通QMI机制一点经验,重点解读了如果建立拨号连接,仅供参考.qm ...
- 第11章 拾遗3:虚拟局域网(VLAN)
1. 虚拟局域网(VLAN) (1)VLAN是建立在物理网络基础上的一种逻辑子网,它将把一个LAN划分成多个逻辑的局域网(VLAN),每个VLAN是一个广播域,VLAN内的主机间通信就和在一个LAN内 ...
- PHP:引用Phpword导出数据到word文档
下载地址https://www.cnwenhui.cn/html/show-597.html(其中有中文使用手册可以下载看看) 1.首先要下载Phpword类库,放在如下图目录下 2.调用方法 pub ...
- WPF 选择电脑文件显示路径,弹出资源管理器,打开文件
选择文件,将路径显示在名为txbx的textbox上 // 在WPF中, OpenFileDialog位于Microsoft.Win32名称空间 Microsoft.Win32.OpenFileDia ...
- git命令简洁版
五:业务逻辑GITgit status要经常用 1. 把远端代码下载下来git clone https://或者git@10.0.4.73:sns,进入cd 文件夹 另外在自己新建立一个项目时,需要 ...
- StanFord ML 笔记 第二部分
本章内容: 1.逻辑分类与回归 sigmoid函数概率证明---->>>回归 2.感知机的学习策略 3.牛顿法优化 4.Hessian矩阵 牛顿法优化求解: 这个我就不记录了,看到一 ...
- Linux的用户
添加用户 添加删除用户 # useradd user # passwd user Changing password for user user. New password: BAD PASSWORD ...
- EasyuiDatagird绑定分页.NetMVC
引入EasyUi所有需要的脚本,样式 <link href="/easyui/themes/default/easyui.css" rel="stylesheet& ...
- centos7安装LNMP与Laravel遇到的一些小问题
安装LNMP 第一次安装 yum update CentOS7下 Nginx1.13.5 + PHP7.1.10 + MySQL5.7.19 源码编译安装 安装mySQL时,mysqld: error ...
- tree-data
[{ label: '一级 1', children: [{ label: '二级 1-1', children: [{ label: '三级 1-1-1' }] }] }, { label: '一级 ...