菜单

文件监控系统

相关源文件

目的与范围

文件监控系统是 Nodemon 的一个核心组件,它监控指定文件和目录的更改,并在检测到相关更改时触发应用程序重启。本文档涵盖了文件监控系统的架构、配置和操作,包括文件如何与监控规则匹配以及更改事件如何处理。有关这些更改如何实际重启进程的信息,请参阅进程管理

架构概述

Nodemon 的文件监控系统由几个相互连接的组件组成,它们协同工作以检测并响应 Node.js 应用程序中的文件更改。

来源: lib/monitor/watch.js26-135 lib/monitor/watch.js137-221 lib/monitor/watch.js223-234

核心组件

监视器模块

监视器模块负责初始化和管理文件系统监视器。它使用 Chokidar 库来高效地监视文件和目录的更改。

来源: lib/monitor/watch.js1-15 lib/monitor/watch.js26-135

匹配器模块

匹配器模块根据配置的规则和模式,确定哪些文件更改应触发应用程序重启。

来源: lib/monitor/match.js1-12 lib/monitor/match.js136-287

监视过程

初始化

Nodemon 启动时,它根据配置的目录和选项初始化文件监视器。

来源: lib/monitor/watch.js26-135

watch 函数通过以下方式初始化文件监控:

  1. 从配置中检索受监控的目录
  2. 设置监视选项,包括忽略模式
  3. 使用适当的配置创建 Chokidar 监视器
  4. 为文件更改设置事件监听器

存在特殊处理,针对:

  • Windows 系统(禁用 globbing)
  • IBM i 系统(启用轮询)
  • 测试环境(禁用 fsEvents)
  • 点文件(默认忽略,除非明确监视)

文件更改检测与处理

当检测到文件更改时,Nodemon 会过滤这些更改并确定它们是否应触发重启。

来源: lib/monitor/watch.js137-221 lib/monitor/watch.js223-244

文件匹配系统

文件匹配系统负责确定哪些文件更改应触发应用程序重启。

匹配规则处理

来源: lib/monitor/match.js10-107 lib/monitor/match.js136-287

规则类型与优先级

文件监控系统中的规则可以是积极的(要监视的文件)或消极的(要忽略的文件)。系统遵循以下原则:

  1. 忽略规则(以 ! 为前缀)优先于监视规则
  2. 更具体的规则(具有更多路径段)优先于不那么具体的规则
  3. 当特异性相同时,更长的规则优先
  4. 扩展名过滤器仅在模式匹配之后应用
规则类型示例描述
监视规则"views/server/*"监视 views/server 目录中的所有文件
忽略规则"!node_modules/*"忽略 node_modules 目录中的所有文件
扩展名过滤器"js,mjs,json"仅监视具有这些扩展名的文件
模式规则"**/*.js"监视任何子目录中的所有 JavaScript 文件
点文件".dotfile"明确监视一个点文件(默认忽略)

来源: lib/monitor/match.js136-165

配置选项

文件监控系统提供多种配置选项来控制其行为:

选项默认描述
watch['*.*']要监视的文件/目录模式数组
ignore各种系统目录要忽略的模式数组
ext'js'要监视的扩展名列表(逗号分隔)
legacyWatchfalse使用轮询而非文件系统事件
pollingInterval不适用轮询间隔(毫秒)
delay0更改后重启前的延迟(毫秒)
watchOptions{}直接传递给 Chokidar 的选项

来源: lib/config/defaults.js4-26

特殊平台考量

文件监控系统会根据操作系统调整其行为:

来源: 55-78

路径规范化和处理

系统包含专门的文件路径处理,以确保跨平台的一致匹配:

  1. 路径将转换为相对于当前工作目录的相对路径
  2. 在 Windows 上,驱动器盘符会大写以保持一致性
  3. 点文件(隐藏文件)默认被忽略,除非明确监视
  4. 目录模式会扩展到包含所有子目录和文件

来源: lib/monitor/watch.js148-170

变更检测流程

来源: lib/monitor/watch.js80-106 lib/monitor/watch.js137-221 lib/monitor/watch.js223-244

性能考量

文件监控系统包含多项功能以优化性能:

  1. 防抖:当快速连续检测到多个文件更改时,可以对重启进行防抖处理,以防止过度重启。
  2. 选择性监视:仅监视基于配置模式和扩展名匹配的文件,从而减少资源使用。
  3. 高效路径匹配:规则按特异性排序,以优化匹配过程。
  4. 跨平台优化:根据平台使用不同的监视策略,以确保最佳性能。

来源: lib/monitor/watch.js210-218 lib/monitor/watch.js236-244

与其他组件的集成

文件监控系统主要通过事件总线与其他 Nodemon 组件集成:

  • 当文件添加到监视列表时,发出 "watching" 事件
  • 当文件更改应触发重启时,发出 "restart" 事件
  • 监听 "reset" 事件,以便在配置更改时重置监视器

来源: 16-24 lib/monitor/watch.js97 lib/monitor/watch.js233

错误处理

文件监控系统包含错误处理功能,以管理常见问题:

  • 检测到过多的被监视文件(从驱动器根目录监视时常见的问题)
  • 权限错误(默认忽略)
  • 传播应中断 Nodemon 执行的核心错误

来源: lib/monitor/watch.js108-129