使用Node、Concurrently和TypeScript运行双脚本遇端口占用错误
解决 EADDRINUSE 端口占用问题
先排查编译输出文件
直接查看 build/queue.js 的内容,确认是不是真的只有 console.log('testing'); 对应的编译代码。如果里面出现了 Express 监听 3000 端口的代码,说明 TypeScript 编译配置有问题,导致 index.ts 的代码被错误编译到了 queue.js 中。
检查 tsconfig.json 配置
重点核对以下配置项:
- outDir:确保设置了正确的输出目录(比如
"outDir": "./build"),保证两个源文件编译后生成独立的目标文件,不会互相覆盖。 - files/include:明确指定需要编译的文件,避免意外编译无关代码。例如:
确保"include": ["src/index.ts", "src/queue.ts"], "outDir": "./build"index.ts和queue.ts分别编译为build/index.js和build/queue.js,内容不混淆。
单独测试单个进程
脱离 concurrently 单独运行命令,定位问题来源:
- 先执行
yarn watch完成编译,再运行yarn serve:queue,看是否会报端口占用错误。如果报错,说明queue.js确实存在监听端口的代码,回到第一步排查编译问题。 - 单独运行
yarn serve:index,确认它能正常监听 3000 端口,且没有重复启动的情况。
限制 nodemon 监听范围
给 nodemon 添加 --watch 参数,让它只监听目标文件的变化,避免因其他文件更新误触发重启或执行错误脚本:
"serve:index": "nodemon --watch ./build/index.js ./build/index.js", "serve:queue": "nodemon --watch ./build/queue.js ./build/queue.js"
清理旧编译文件
残留的旧编译文件可能引发异常,先删除整个 build 目录,重新编译后再启动服务:
rm -rf build && tsc && yarn dev
内容的提问来源于stack exchange,提问作者Miguel Stevens
相关产品推荐
相关产品推荐

