Node watch 不执行应用
NODE_OPTIONS 的下划线 watch 别名没从子进程过滤,应用不运行却递归生成进程。核对规范拼写与实际 macOS、Windows 监听条件。
Node 启动后没有打印应用的第一条日志,系统里却出现一层又一层 Node 子进程。若 watch 选项来自 NODE_OPTIONS,检查是否用了下划线拼写,例如 --watch_path。
Node 的一般选项解析允许下划线与连字符等价,但 watch 父进程给子进程清理环境选项时,未必按同样规则识别别名。已核对的正式版 26.11.1 中,这个过滤路径仍只列出了连字符形式。
核心解析成功,子进程过滤却漏掉
watch 模式本来需要一个父进程监听变化,再启动实际运行应用的子进程。为了避免子进程也进入 watch,父进程会从子进程的 NODE_OPTIONS 中去掉相关选项。
旧过滤判断识别 --watch-path、--watch-preserve-output 等拼写。核心解析器可以接受 --watch_path,但它进入清理列表时没有被识别,便继续传给子进程。子进程又成为一个 watch 父进程,继续往下生成,应用入口始终没有正常执行。
这属于环境继承与选项归一化之间的缺口,不是应用里的递归调用。重复启动同一个失败命令只会继续增加进程,不适合作为排查办法。
只修正对应的 watch 选项
停止自己启动的异常开发任务,按原来的进程管理方式清理其子进程,再查看启动脚本和 NODE_OPTIONS 的脱敏内容。保留认证、预加载和其他必要选项,不要直接清空整个环境变量。
对使用下划线的 watch 选项,改成规范的连字符形式。比如已有配置中的 --watch_path=./src 应改成 --watch-path=./src,实际路径保持原样。
如果决定把 watch 选项移到命令行,要同时从子进程继承的环境配置中去掉对应项,避免两处仍保留不同写法。这里只调整自己拥有的启动配置,不需要改全局 shell 环境或无关服务。
还要核对选项自身的条件。本文检查的 --watch-path 在正式文档中只支持 macOS 和 Windows,并且会关闭默认的 imported/required 模块监听,改为监听指定路径。Linux 上的 ERR_FEATURE_UNAVAILABLE_ON_PLATFORM 是另一种错误,不能通过修改下划线来获得平台不支持的能力。
指定路径也需要覆盖应用真正依赖的文件。为了避免递归生成而换成一个空目录,可能让进程启动了,却失去必要的更新触发。
不要把版本号当成过滤已修复
这里没有逐个核定所有历史发行版的受影响范围。26.11.1 的正式实现仍使用连字符过滤列表,因此也不能给这个问题建议“升级到 26.11.1 就好”。
选用后续版本时,应确认实际的子进程过滤处理是否覆盖别名。核心能解析某个选项,不代表每一层应用代码都完成了同样的归一化。
在受控环境中验收时,应用应真正开始运行,进程层次保持为预期的 watcher 与运行子进程。随后修改一处原先应被监听的文件,确认仍会正常重启。没有继续生成子代,只证明递归停止;丢掉监听范围也不能算完整修复。


