如何通过Nodemon仅在subapp变更时触发指定构建脚本?
实现仅Subapp变更时先构建再重启的Nodemon配置
可以实现,具体操作如下:
1. 移除subapp中现有nodemon.json的restart事件配置
全局的restart事件会在任何重启触发时执行build,不符合仅subapp变更才执行的需求,先删除subapp的nodemon.json里的events配置。
2. 在mainapp目录下创建前置处理脚本
新建pre-restart.js文件(放在mainapp根目录),用来判断变更来源并执行对应操作:
const path = require('path'); const { execSync } = require('child_process'); // 获取Nodemon传递的变更文件列表 const changedFiles = process.env.NODEMON_FILES?.split(',') || []; // 检查是否有变更文件来自subapp的src目录 const subappSrcPath = path.resolve(__dirname, '../subapp/src'); const isSubappChange = changedFiles.some(file => { return path.resolve(file).startsWith(subappSrcPath); }); if (isSubappChange) { console.log('检测到subapp代码变更,执行构建命令...'); // 切换到subapp目录执行build execSync('npm run build', { cwd: '../subapp', stdio: 'inherit' }); }
3. 修改mainapp的watch脚本命令
更新mainapp/package.json中的watch脚本,添加--event参数指定重启前执行上述脚本:
"scripts": { "watch": "nodemon --watch src/ app.js -e ts --watch '../subapp/src/' -e ts --event restart:./pre-restart.js" }
原理说明
- Nodemon在检测到文件变更触发重启前,会执行
restart事件绑定的pre-restart.js脚本 - 脚本通过
NODEMON_FILES环境变量获取本次触发重启的所有变更文件路径 - 判断这些路径是否属于subapp的src目录,若是则执行subapp的build命令
- 只有当变更来自subapp时才会执行构建,mainapp自身变更时直接重启,不会触发build
内容的提问来源于stack exchange,提问作者asus
相关产品推荐
相关产品推荐

