You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 23:33:11