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

如何让nodemon自动监视Yarn工作区本地依赖变更并重启应用?

如何让nodemon自动监听Yarn工作区中的本地依赖变更并重启应用

在Yarn工作区的monorepo结构下,手动维护nodemon的watch路径确实繁琐,这里提供两种无需手动修改配置的解决方案:

方案一:动态生成nodemon监听路径

通过脚本自动扫描当前项目的本地依赖,生成对应的watch路径并更新nodemon配置:

  1. 在项目根目录创建generate-nodemon-watch.js脚本:
const fs = require('fs');
const path = require('path');
const pkg = require('./package.json');

// 筛选工作区内的本地依赖(根据你的包命名规则调整,这里以@app/开头为例)
const localDeps = Object.keys(pkg.dependencies).filter(dep => dep.startsWith('@app/'));

// 解析每个本地依赖的实际源码路径
const watchPaths = localDeps.map(dep => {
  const depSymlinkPath = path.resolve(__dirname, 'node_modules', dep);
  // 获取软链接指向的真实目录
  const realDepPath = fs.realpathSync(depSymlinkPath);
  // 假设每个包的源码都在src目录下,按需调整
  return path.relative(__dirname, path.join(realDepPath, 'src'));
});

// 合并项目自身的src目录
watchPaths.unshift('src');

// 生成nodemon配置并写入文件
const nodemonConfig = {
  exec: 'node -r esbuild-register',
  ext: 'ts,json',
  watch: watchPaths,
  ignore: ['node_modules']
};

fs.writeFileSync('./nodemon.json', JSON.stringify(nodemonConfig, null, 2));
  1. 修改package.json的启动脚本,先执行配置生成再启动nodemon:
{
  "scripts": {
    "dev": "node generate-nodemon-watch.js && nodemon"
  }
}

以后每次启动开发服务时,脚本会自动识别当前安装的本地依赖,更新nodemon的监听路径,完全不用手动修改配置。

方案二:配置nodemon跟踪软链接并忽略无关node_modules

利用nodemon的软链接跟踪功能和反向忽略规则,直接监听本地依赖的源码目录:

修改nodemon.json如下:

{
  "exec": "node -r esbuild-register",
  "ext": "ts,json",
  "watch": [
    "src",
    "node_modules/@app/*/src"
  ],
  "ignore": [
    "node_modules/!( @app )"
  ],
  "followSymlinks": true
}
  • followSymlinks: true:让nodemon跟踪node_modules里的软链接,指向本地包的真实源码目录
  • ignore规则:忽略node_modules下除了@app开头的目录之外的所有内容,避免监听大量第三方依赖
  • watch规则:直接匹配所有本地包的src目录(需确保你的本地包源码都在src目录下,按需调整)

方案对比

  • 方案一:配置更精准,适配依赖变动频繁的场景,但需要额外脚本,启动时会更新nodemon配置文件
  • 方案二:配置更简洁,无需额外脚本,但依赖本地包的目录结构和命名规则,若包结构有变动需要调整匹配规则

内容的提问来源于stack exchange,提问作者Rein van Haaren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:20:37