无法同时运行TypeScript与nodemon的问题求助
问题描述
我正在用Node.js、Express和TypeScript搭建RESTful API,已经装了包括nodemon在内的所有依赖。我修改了tsconfig.json的第58行:把原本注释的// "outDir": "./"取消注释,改成了"outDir": "./dist"。之后我想让TypeScript的监听编译和nodemon的服务器热重载配合工作,就在package.json里设置了启动命令:
"start": "tsc -w & nodemon dist/app.js"
但是运行npm start之后,发现只有tsc在监听文件变化,服务器根本没启动,这到底是哪里出问题了?
我原本预期这个命令能让ts的监听和nodemon同时运行,但实际只有watch命令生效,服务器完全没起来。
解决方案
嘿,我之前也踩过这个坑!给你几个实用的排查方向和解决办法:
1. 系统兼容问题:&符号在Windows下不生效
你用的&是Mac/Linux这类类Unix系统的后台运行语法,但如果是Windows系统,这个符号只会执行第一个命令(也就是tsc -w),后面的nodemon命令根本不会被触发。
解决办法:用concurrently工具统一处理并发
这是最稳妥的跨系统方案:
- 先安装依赖:
npm install --save-dev concurrently - 然后修改package.json里的启动命令:
这样不管你用什么系统,两个命令都会同时跑起来。"start": "concurrently \"tsc -w\" \"nodemon dist/app.js\""
2. 初始化编译问题:dist目录还没生成就启动nodemon
第一次运行tsc -w的时候,TypeScript需要一点时间生成dist目录和app.js文件,但nodemon启动得太快,找不到目标文件就直接退出了,你可能没注意到这个错误。
解决办法:先手动编译一次,或者让命令先编译再并发
- 方式一:先跑一次编译命令生成dist:
然后再运行tscnpm start - 方式二:修改启动命令,先完成一次编译再启动并发监听:
"start": "tsc && concurrently \"tsc -w\" \"nodemon dist/app.js\""
3. 路径配置问题:nodemon找不到正确的入口文件
检查一下你的tsconfig.json里的rootDir配置,如果你没指定rootDir,编译出来的文件结构可能和你预期的不一样,导致dist/app.js不存在。
解决办法:确认文件路径
- 打开dist目录,看看是不是真的有app.js文件
- 可以在tsconfig.json里明确指定
rootDir,比如你的ts源码都在src目录的话:
这样编译出来的文件结构会和src目录一致,不会混乱。"rootDir": "./src"
另外,如果你觉得用两个工具太麻烦,也可以试试ts-node-dev,它可以直接监听TypeScript文件,自动编译并重启服务器,不用单独配置tsc和nodemon,不过这个看个人习惯啦~
备注:内容来源于stack exchange,提问作者Yusuf Abdulrasheed

