Node.js应用中Chokidar使用glob **无响应问题求助
Chokidar在Windows下使用
**通配符无响应的解决方案 问题核心
在Windows环境的Node.js应用中,直接调用chokidar.watch('**')不会触发任何文件变更事件,但chokidar_cli却能正常工作。这是因为Chokidar CLI内部自动处理了跨平台的glob兼容逻辑,而直接调用API时需要显式配置适配参数。
修复方案
方案1:调整glob模式并显式配置工作目录
将无前缀的**改为./**,明确从当前工作目录开始匹配,同时补充必要的配置项:
import * as chokidar from 'chokidar'; function add_watch(glob:string){ console.log('add_watch',glob) chokidar.watch(glob,{ ignoreInitial: true, cwd: process.cwd(), // 显式指定当前工作目录 followSymlinks: false // Windows下关闭符号链接跟踪避免异常 }).on('all', (reason,full_filename) => { console.log({glob,reason,full_filename}) }) } function main(){ add_watch('./**') // 使用带相对路径前缀的通配符 } main()
方案2:借助glob模块预解析文件(可选)
如果方案1仍有问题,可先用glob模块解析出所有目标文件,再传递给Chokidar监听:
import * as chokidar from 'chokidar'; import { glob } from 'glob'; async function add_watch(globPattern:string){ console.log('add_watch', globPattern) const files = await glob(globPattern, { cwd: process.cwd(), nodir: true }); chokidar.watch(files,{ ignoreInitial: true }).on('all', (reason,full_filename) => { console.log({glob: globPattern, reason, full_filename}) }) } async function main(){ await add_watch('**') } main()
原因说明
Windows系统使用\作为路径分隔符,Chokidar默认的glob解析逻辑在处理无前缀的**时,无法正确遍历当前目录下的所有层级文件。而chokidar_cli内部默认配置了cwd参数,并做了跨平台的glob兼容处理,因此能正常工作。
内容的提问来源于stack exchange,提问作者yigal
相关产品推荐
相关产品推荐

