如何让nodemon自动监视Yarn工作区本地依赖变更并重启应用?
如何让nodemon自动监听Yarn工作区中的本地依赖变更并重启应用
在Yarn工作区的monorepo结构下,手动维护nodemon的watch路径确实繁琐,这里提供两种无需手动修改配置的解决方案:
方案一:动态生成nodemon监听路径
通过脚本自动扫描当前项目的本地依赖,生成对应的watch路径并更新nodemon配置:
- 在项目根目录创建
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));
- 修改
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
相关产品推荐
相关产品推荐

