如何配置node-dev使其每次重启时自动执行指定npm任务?
实现node-dev重启时自动执行TSOA生成任务
当然可以搞定这个需求!我之前在TSOA+Express的项目里也遇到过同样的痛点,下面给你两个实用的方案,你可以根据自己的项目情况选:
方案一:自定义启动脚本(推荐,最可靠)
这个方法的核心是让node-dev每次重启时先执行TSOA生成命令,再启动你的应用。步骤很简单:
- 在项目根目录创建一个
start.js文件,内容如下:
const { execSync } = require('child_process'); // 先执行你的TSOA生成命令,根据你的实际配置调整 try { console.log('🔄 正在生成TSOA路由和Swagger文档...'); execSync('npm run tsoa:generate', { stdio: 'inherit' }); } catch (error) { console.error('❌ TSOA生成失败:', error.message); process.exit(1); // 生成失败就终止启动,避免用旧路由运行 } // 启动你的Express应用,替换成你实际的入口文件路径 require('./src/server');
- 修改
package.json里的脚本配置:
{ "scripts": { "tsoa:generate": "tsoa spec && tsoa routes", // 这里是你原本手动执行的TSOA命令 "dev": "node-dev start.js" } }
现在运行npm run dev,每次node-dev因为文件变化重启时,都会先自动执行TSOA生成任务,再启动应用。完美解决手动执行的问题!
方案二:用文件监听工具并行执行
如果你不想写JS脚本,可以用监听工具来自动触发TSOA生成,同时启动node-dev:
- 先安装需要的依赖:
npm install --save-dev npm-run-all onchange
- 修改
package.json的脚本:
{ "scripts": { "tsoa:generate": "tsoa spec && tsoa routes", "dev:watch-tsoa": "onchange 'src/**/*.ts' -- npm run tsoa:generate", // 监听TS源码文件变化 "dev:start": "node-dev src/server.js", "dev": "npm-run-all -p dev:watch-tsoa dev:start" // 并行运行两个任务 } }
这个方案会同时做两件事:一是监听你的TS源码文件变化,一旦有修改就自动执行TSOA生成;二是启动node-dev运行你的应用。当TSOA生成的路由文件更新后,node-dev会检测到变化并重启应用。
一些注意事项
- 确保TSOA生成的路由文件在node-dev的监听范围内,默认情况下node-dev会监听所有文件,但如果你有特殊的忽略配置,记得把生成文件排除在外。
- 如果你的TSOA命令需要特定的环境变量,可以在execSync或者脚本里加上对应的变量配置。
- 方案一的好处是不管node-dev因为什么原因重启(比如任何文件变化),都会先执行TSOA生成;方案二更适合只在源码变化时才触发生成的场景。
内容的提问来源于stack exchange,提问作者Eik W.
相关产品推荐
相关产品推荐

