Windows下chokidar与chokidar-cli同Glob规则失效问题求助
我帮你梳理下这个问题的核心原因和解决办法,你遇到的情况其实是Chokidar在CLI和Node.js API中的默认配置差异,以及Windows路径转义的小坑导致的:
问题根源
路径转义与跨平台兼容性:
命令行中你用的"D:\PATH\**\WATCHED_FOLDER\*.TXT",引号会让系统直接把完整的glob表达式传递给chokidar-cli;但在Node.js字符串里,你用了'D:\\PATH\\**\\WATCHED_FOLDER\\*.TXT',虽然转义是对的,但Chokidar底层依赖的node-glob更推荐用正斜杠/作为路径分隔符,跨平台表现更稳定,反斜杠有时候会和glob的转义规则产生冲突。默认监听配置差异:
Chokidar CLI默认可能启用了某些适配Windows的配置(比如轮询模式),而Node.js API的默认配置更偏向跨平台性能,在Windows的某些场景(比如深层目录、网络共享文件夹、部分杀毒软件拦截原生监听)下,原生的文件监听机制会失效,导致事件无法触发。
解决方案
方案1:改用正斜杠路径
直接把路径中的反斜杠换成正斜杠,不需要转义,避免转义带来的潜在问题:
const chokidar = require('chokidar'); chokidar .watch('D:/PATH/**/WATCHED_FOLDER/*.TXT') .on('all', (event, path) => { console.log(event, path) })
方案2:启用轮询模式
如果方案1无效,大概率是Windows原生监听机制的问题,手动开启轮询模式即可(这也是CLI可能默认启用的配置):
const chokidar = require('chokidar'); chokidar .watch('D:/PATH/**/WATCHED_FOLDER/*.TXT', { usePolling: true, interval: 100 // 轮询间隔,可根据需求调整,单位毫秒 }) .on('all', (event, path) => { console.log(event, path) })
排查小技巧
如果还是不行,可以先简化glob表达式,比如去掉**,直接监听'D:/PATH/WATCHED_FOLDER/*.TXT',看是否能触发事件。如果能触发,说明是**的匹配范围问题,这时候可以检查目标路径的层级是否符合预期,或者添加depth选项明确匹配深度。
内容的提问来源于stack exchange,提问作者Lorenz Meyer

