使用tsx --watch时重复出现'Restarting server/server.js'消息的解决方法
解决tsx --watch重复输出'Restarting'消息的问题
问题场景
在package.json的scripts中配置了使用concurrently同时启动tsx监听服务端文件和vite前端服务:
"scripts": { "dev": "concurrently \"tsx --watch server/server.js\" \"vite --port=3000 --host --open\"" }
执行pnpm run dev后服务正常运行,但控制台会大量重复输出:
[0] Restarting 'server/server.js'. [0] Restarting 'server/server.js'. ...
原因分析
这种重复重启通常是因为tsx监听的文件被进程自身修改,触发了无限循环重启:
- 比如服务端代码运行时生成的日志、临时文件,或编译产物被放在了tsx监听的目录下
- 也可能是tsx默认监听当前目录所有文件变更,包括node_modules或其他无关文件的变动(相对少见)
解决方法
方法1:精准控制tsx监听的文件范围
给tsx添加--include或--exclude参数,只监听需要的服务端文件,排除无关目录:
"scripts": { "dev": "concurrently \"tsx --watch --include 'server/**/*.{ts,js}' server/server.js\" \"vite --port=3000 --host --open\"" }
或者直接排除不需要监听的目录:
"scripts": { "dev": "concurrently \"tsx --watch --exclude 'node_modules/**,logs/**' server/server.js\" \"vite --port=3000 --host --open\"" }
方法2:调整服务端文件写入路径
如果服务端代码有写入文件到server目录的逻辑(比如生成日志、缓存),把这些文件输出到项目根目录的独立文件夹(如./logs、./temp),并确保该文件夹不在tsx监听范围内。
方法3:兼容旧版本tsx的参数
部分tsx旧版本使用--ignore-watch替代--exclude,可以尝试:
"scripts": { "dev": "concurrently \"tsx --watch --ignore-watch node_modules,logs server/server.js\" \"vite --port=3000 --host --open\"" }
方法4:临时屏蔽重复输出(治标不治本)
如果暂时找不到触发重启的根源,可以先关闭tsx的重复日志输出:
"scripts": { "dev": "concurrently \"tsx --watch --clear-screen=false server/server.js\" \"vite --port=3000 --host --open\"" }
验证
修改配置后重新执行pnpm run dev,观察控制台是否还会重复输出重启消息。若问题依旧,检查项目中是否有其他工具(如自动格式化、文件同步工具)在修改server目录下的文件。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

