javascript

推荐列表 站点导航

当前位置:首页 > 脚本编程 > javascript >

浅谈Node.js监视文件变化的方法

来源:网络整理  作者:  发布时间:2020-12-16 23:41
fs.FSWatcher类 继承了 EventEmitter,用于监视文件变化,调用 fs.watch 后返回一个 fs.FSWatcher 实例,每当指定监视的文件被修...

未提供简单的监视文件树方式

Node.js fs.watchFile:

fs.FSWatcher类 继承了 EventEmitter,用于监视文件变化,调用 fs.watch 后返回一个 fs.FSWatcher 实例,每当指定监视的文件被修改时,实例会触发事件调用回调函数

Linux 操作系统使用 inotify

interval:默认值 5007,用来指定轮询频率(ms)

recursive:默认值 false,应该监视所有子目录,还是仅监视当前目录,仅在 macOS 和 Windows 上支持

fs.unwatchFile('./test.txt');社区选择

fs.watchFile() 性能问题,fs.watch() 平台不一致等两个方法都有不尽如人意的地方

chokidar

在部分场景不触发修改事件(MacOS Sublime)

persistent:默认值 true,当文件正在被监视时,进程是否应该继续运行

在 macOS 系统使用 FSEvents

1、filename

encoding

3、listener(currentStats, previousStats):listener 有两个参数,当前的 stat 对象和之前的 stat 对象

事件处理问题和 fs.watch 一样烂

大部分文件变化 eventType 都是 rename.

fs.watch('./tmp', (eventType, filename) => { if (filename) { console.log(filename); } });fs.watch()

fs.watch(filename[, options][, listener]) 监视文件变化,返回 fs.FSWatcher 实例

const fs = require('fs'); fs.watchFile('./test.txt', { interval: 100 }, (curr, prev) => { console.log('当前的最近修改时间是: ' + curr.mtime); console.log('之前的最近修改时间是: ' + prev.mtime); }); const tid = setInterval(() => { fs.appendFile('./test.txt', 'Hello, world!\n', err => { if (err) throw err; console.log('文件修改完成'); }); }, 300); setTimeout(() => { clearInterval(tid); fs.unwatchFile('./test.txt'); }, 2000);fs.watch() 与 fs.watchFile()

因为 fs.watchFile() 使用轮训方式检测文件变化,如果不设置 interval 或者设置较高的值会发现文件变化的监视有延迟
当然 fs.watch() 依赖操作系统的实现,在不同平台上表现会有差异

MacOS 有时候不提供 filename

日常在监视文件变化可以选择社区的优秀方案

const chokidar = require('chokidar'); // One-liner for current directory chokidar.watch('.').on('all', (event, path) => { console.log(event, path); });// Initialize watcher. const watcher = chokidar.watch('file, dir, glob, or array', { ignored: /(^|[\/\\])\../, // ignore dotfiles persistent: true }); // Something to use when events are received. const log = console.log.bind(console); // Add event listeners. watcher .on('add', path => log(`File ${path} has been added`)) .on('change', path => log(`File ${path} has been changed`)) .on('unlink', path => log(`File ${path} has been removed`)); // More possible events. watcher .on('addDir', path => log(`Directory ${path} has been added`)) .on('unlinkDir', path => log(`Directory ${path} has been removed`)) .on('error', error => log(`Watcher error: ${error}`)) .on('ready', () => log('Initial scan complete. Ready for changes')) .on('raw', (event, path, details) => { // internal log('Raw event info:', event, path, details); });

更多编程相关知识,请访问:编程视频!!

以上就是浅谈Node.js监视文件变化的方法的详细内容,更多请关注聚合云库其它相关文章!

listener(eventType, filename):文件变化回调函数

fs.watch('./', { recursive: true }, (eventType, filename) => { console.log(eventType, filename); });fs.watchFile()

fs.watchFile(filename[, options], listener) 用于监视文件变化


eventType 主要是 rename 和 change ,在大多数平台上,文件在目录中出现或消失时触发 'rename' 事件,在 Windows 上,如果监视的目录被移动或重命名,则不会触发任何事件,当监视的目录被删除时,则报告 EPERM 错误

经常一次修改两次触发事件

fs.unwatchFile

fs.unwatchFile(filename[, listener]) 停止监视 filename 的变化,如果指定了 listener,则仅移除此特定监听器,否则将移除所有监听器,从而停止监视 filename

2、options

2、options

而 fs.watch() 监听操作系统提供的事件,而且可以监视目录变化,使用 fs.watch() 比 fs.watchFile() 更高效,平常应尽可能使用 fs.watch() 代替 fs.watchFile()

1、filename:文件或文件夹路径

biginit:默认值 false,指定回调 stat 中的数值是否为 biginit 类型

Node.js fs.watch:

CPU 消耗大

node-watch

在 windows 系统使用 ReadDirectoryChangesW

要在修改文件时收到通知,则需要比较 curr.mtime 和 prev.mtime

https://www.npmjs.com/package/chokidar

没有嵌套监听

persistent:默认值 true,指示如果文件已正被监视,进程是否应继续运行

相关热词: 方法

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://www.juheyunku.com/jiaob/javascript/4639.shtml

最新文章
Javascript是什么? Javascript是什么?

时间:2021-01-04

Canvas入门实战之实现一个 Canvas入门实战之实现一个

时间:2021-01-04

11月份GitHub上最热门的Ja 11月份GitHub上最热门的Ja

时间:2021-01-04

一篇带给你JavaScript的Cla 一篇带给你JavaScript的Cla

时间:2021-01-04

详解js异步文件加载器 详解js异步文件加载器

时间:2021-01-04

深入理解JavaScript中的箭头 深入理解JavaScript中的箭头

时间:2021-01-04

复盘Node项目中遇到的13+常 复盘Node项目中遇到的13+常

时间:2021-01-04

连续3年稳居第一,全球 连续3年稳居第一,全球

时间:2021-01-04

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

浅谈Node.js监视文件变化的方法

2020-12-16 编辑:

未提供简单的监视文件树方式

Node.js fs.watchFile:

fs.FSWatcher类 继承了 EventEmitter,用于监视文件变化,调用 fs.watch 后返回一个 fs.FSWatcher 实例,每当指定监视的文件被修改时,实例会触发事件调用回调函数

Linux 操作系统使用 inotify

interval:默认值 5007,用来指定轮询频率(ms)

recursive:默认值 false,应该监视所有子目录,还是仅监视当前目录,仅在 macOS 和 Windows 上支持

fs.unwatchFile('./test.txt');社区选择

fs.watchFile() 性能问题,fs.watch() 平台不一致等两个方法都有不尽如人意的地方

chokidar

在部分场景不触发修改事件(MacOS Sublime)

persistent:默认值 true,当文件正在被监视时,进程是否应该继续运行

在 macOS 系统使用 FSEvents

1、filename

encoding

3、listener(currentStats, previousStats):listener 有两个参数,当前的 stat 对象和之前的 stat 对象

事件处理问题和 fs.watch 一样烂

大部分文件变化 eventType 都是 rename.

fs.watch('./tmp', (eventType, filename) => { if (filename) { console.log(filename); } });fs.watch()

fs.watch(filename[, options][, listener]) 监视文件变化,返回 fs.FSWatcher 实例

const fs = require('fs'); fs.watchFile('./test.txt', { interval: 100 }, (curr, prev) => { console.log('当前的最近修改时间是: ' + curr.mtime); console.log('之前的最近修改时间是: ' + prev.mtime); }); const tid = setInterval(() => { fs.appendFile('./test.txt', 'Hello, world!\n', err => { if (err) throw err; console.log('文件修改完成'); }); }, 300); setTimeout(() => { clearInterval(tid); fs.unwatchFile('./test.txt'); }, 2000);fs.watch() 与 fs.watchFile()

因为 fs.watchFile() 使用轮训方式检测文件变化,如果不设置 interval 或者设置较高的值会发现文件变化的监视有延迟
当然 fs.watch() 依赖操作系统的实现,在不同平台上表现会有差异

MacOS 有时候不提供 filename

日常在监视文件变化可以选择社区的优秀方案

const chokidar = require('chokidar'); // One-liner for current directory chokidar.watch('.').on('all', (event, path) => { console.log(event, path); });// Initialize watcher. const watcher = chokidar.watch('file, dir, glob, or array', { ignored: /(^|[\/\\])\../, // ignore dotfiles persistent: true }); // Something to use when events are received. const log = console.log.bind(console); // Add event listeners. watcher .on('add', path => log(`File ${path} has been added`)) .on('change', path => log(`File ${path} has been changed`)) .on('unlink', path => log(`File ${path} has been removed`)); // More possible events. watcher .on('addDir', path => log(`Directory ${path} has been added`)) .on('unlinkDir', path => log(`Directory ${path} has been removed`)) .on('error', error => log(`Watcher error: ${error}`)) .on('ready', () => log('Initial scan complete. Ready for changes')) .on('raw', (event, path, details) => { // internal log('Raw event info:', event, path, details); });

更多编程相关知识,请访问:编程视频!!

以上就是浅谈Node.js监视文件变化的方法的详细内容,更多请关注聚合云库其它相关文章!

listener(eventType, filename):文件变化回调函数

fs.watch('./', { recursive: true }, (eventType, filename) => { console.log(eventType, filename); });fs.watchFile()

fs.watchFile(filename[, options], listener) 用于监视文件变化


eventType 主要是 rename 和 change ,在大多数平台上,文件在目录中出现或消失时触发 'rename' 事件,在 Windows 上,如果监视的目录被移动或重命名,则不会触发任何事件,当监视的目录被删除时,则报告 EPERM 错误

经常一次修改两次触发事件

fs.unwatchFile

fs.unwatchFile(filename[, listener]) 停止监视 filename 的变化,如果指定了 listener,则仅移除此特定监听器,否则将移除所有监听器,从而停止监视 filename

2、options

2、options

而 fs.watch() 监听操作系统提供的事件,而且可以监视目录变化,使用 fs.watch() 比 fs.watchFile() 更高效,平常应尽可能使用 fs.watch() 代替 fs.watchFile()

1、filename:文件或文件夹路径

biginit:默认值 false,指定回调 stat 中的数值是否为 biginit 类型

Node.js fs.watch:

CPU 消耗大

node-watch

在 windows 系统使用 ReadDirectoryChangesW

要在修改文件时收到通知,则需要比较 curr.mtime 和 prev.mtime

https://www.npmjs.com/package/chokidar

没有嵌套监听

persistent:默认值 true,指示如果文件已正被监视,进程是否应继续运行

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://www.juheyunku.com/jiaob/javascript/4639.shtml

相关文章

风云图片

推荐阅读

返回javascript频道首页