菜单

核心组件

相关源文件

本页面详细介绍了 nodemon 系统中的主要模块及其职责。有关事件系统的信息,请参阅事件系统。有关配置详情,请参阅配置系统。有关文件监控的具体信息,请参阅文件监控系统

系统概览

Nodemon 围绕几个核心组件构建,这些组件协同工作以监控文件更改并自动重启 Node.js 应用程序。这些组件以模块化结构组织,职责明确分离。

关键组件架构

来源:lib/nodemon.js1-25

主模块

主模块(nodemon.js)作为 CLI 和程序化 API 使用的入口点。它初始化系统,协调各组件,并提供公共 API。

主要职责

  • 初始化 nodemon 应用程序
  • 处理命令行参数
  • 加载并应用配置
  • 设置事件处理程序
  • 管理文件监控系统
  • 提供公共 API 方法(重启、重置、事件处理)

模块结构和 API

主模块导出一个主要函数,该函数接受一个设置对象或一个命令字符串。此函数使用提供的配置初始化 nodemon,并返回一个允许程序化控制的 API 对象。

来源:lib/nodemon.js24-251 lib/nodemon.js253-316

事件总线

事件总线(utils/bus)作为所有组件之间的中心通信通道。它基于 Node.js 的 EventEmitter,并在主模块中作为 utils.bus 导入。

关键事件

  • start:当 nodemon 启动子进程时触发
  • restart:当 nodemon 需要重启进程时触发
  • crash:当受监控的应用程序崩溃时触发
  • exit:当受监控的应用程序退出时触发
  • config:update:当配置更改时触发
  • log:用于内部消息传递

事件流图

事件总线模式实现了组件间的松散耦合,允许它们在没有直接依赖的情况下进行通信。

来源:lib/nodemon.js8 lib/utils/index.js16 lib/nodemon.js25-116

配置系统

配置系统(config/index.js)负责从多个来源加载、合并和应用配置设置。

配置来源(按优先级顺序)

  1. 命令行参数
  2. 本地 nodemon.json 文件
  3. 全局 nodemon.json 文件
  4. 具有 nodemonConfig 属性的 package.json 文件
  5. 默认设置

配置加载流程

配置系统对 nodemon 的灵活性至关重要,它允许用户通过多个接口点自定义其行为。

来源:lib/nodemon.js11 lib/nodemon.js80-104

监控系统

监控系统(monitor/index.js)根据配置的规则监控文件更改,并在必要时触发重启。

关键组件

  • monitor/index.js:核心监控模块
  • monitor/watch.js:文件系统监控功能
  • monitor/match.js:针对规则的文件模式匹配
  • monitor/run.js:进程执行和重启处理

监控与重启流程

监控系统结合文件监控和模式匹配来确定何时触发重启。

来源:lib/nodemon.js3 lib/nodemon.js246

规则系统

规则系统(rules/add.js)负责将文件模式转换为正则表达式,并管理监控和忽略规则。

模式处理

  • 处理 glob 模式(例如,*.js, public/**/*
  • 处理注释剥离和空白规范化
  • 将模式编译成正则表达式,以便进行高效匹配

规则系统为 nodemon 的文件过滤功能提供了基础,能够精确控制哪些文件触发重启。

来源:lib/rules/add.js1-89

实用函数

Nodemon 包含各种实用函数(utils/index.jsutils/log.js),这些函数提供了整个应用程序中使用的常见功能。

关键实用工具

  • 日志记录:格式化、颜色编码的控制台输出
  • 平台检测:用于跨平台兼容性的辅助函数
  • 进程管理:用于处理进程的函数
  • 对象操作:克隆和合并操作

日志系统结构

实用函数提供了必要的横切功能,支持核心组件。

来源:lib/utils/index.js1-103 lib/utils/log.js1-82

进程管理

进程管理组件(spawn.js)负责创建、监控和控制运行用户应用程序的子进程。

主要职责

  • 使用正确的环境和参数生成子进程
  • 管理进程信号和终止
  • 处理 I/O 流(stdout、stderr)
  • 检测崩溃和异常退出

进程管理对 nodemon 的核心重启功能至关重要,它确保了应用程序状态之间的平稳过渡。

来源:lib/nodemon.js12 lib/nodemon.js239-240

组件交互

核心组件通过事件总线进行交互,以提供 nodemon 的文件监控和应用程序重启功能。

完整系统流程

此系统流程代表了 nodemon 操作的完整周期,从初始化到由文件更改或用户输入触发的重启过程。

来源:1-316

集成点

Nodemon 暴露了几个集成点,使其既可以作为命令行工具使用,也可以作为程序化 API 使用。

命令行界面

  • 通过 nodemon [options] [script.js] 直接执行
  • 通过 nodemon.json 文件进行配置
  • 交互式命令(例如,'rs' 用于重启)

编程 API

  • 作为 Node.js 模块被引用
  • 用于自定义集成的基于事件的接口
  • 通过配置对象可定制

模块化架构和事件驱动设计使 nodemon 既灵活又强大,适用于各种开发工作流程。

来源:lib/nodemon.js24-251 lib/nodemon.js259-294