使用concurrently运行TS监听编译与Node.js程序时终端无法输入
问题原因
你遇到的输入无法响应问题,根源在于concurrently工具的特性:当它同时运行多个进程时,会默认捕获终端的标准输入(stdin),不会自动转发给你的Node.js进程,导致readline无法获取用户输入。
解决方案
以下几种方式可以解决这个问题:
1. 分开运行编译与命令
放弃用concurrently同时启动两个进程,分别打开两个终端窗口:
- 第一个终端运行编译监听:
tsc -w - 第二个终端运行Node程序:
node dist/index.js
这种方式最直接,Node进程能完全独立获取终端输入。
2. 配置concurrently转发stdin
修改package.json中的main脚本,给concurrently添加--stdin参数,指定将输入转发给Node进程:
"main": "concurrently --stdin \"node dist/index.js\" \"tsc -w\""
如果需要给进程命名以便更清晰管理,可以加上进程标识:
"main": "concurrently -n \"APP,TSC\" --stdin \"APP\" \"node dist/index.js\" \"tsc -w\""
其中-n给进程设置名称,--stdin "APP"指定把终端输入转发给名为APP的Node进程。
3. 改用nodemon + ts-node简化工作流
不需要手动编译到dist目录,直接用nodemon监听TypeScript文件变化,配合ts-node实时运行:
首先安装依赖:
npm install nodemon ts-node --save-dev
然后修改package.json的scripts:
"main": "nodemon --watch src --ext ts --exec ts-node src/index.ts"
这种方式既实现了代码热更新,又能让readline正常获取终端输入,无需额外处理stdin转发。
内容的提问来源于stack exchange,提问作者KyratzakosAp
相关产品推荐
相关产品推荐

