Package.json多命令配置问题:React与Node.js服务无法同时启动
解决同时启动客户端和服务端并在独立终端标签页运行的问题
你的start命令用了&&,这是串行执行逻辑——只有前一个命令(init-server)执行完成并退出后,才会执行下一个命令(init-client)。但服务端启动后是常驻进程,不会主动退出,所以客户端永远没机会启动。
一、同时启动两个服务(同终端后台运行)
最通用的跨平台方案是使用concurrently包:
- 安装依赖:
npm install concurrently --save-dev
- 修改scripts配置:
"scripts": { "init-client": "cd ./client && npm start", "init-server": "cd ./server && npm run dev", "start": "concurrently \"npm run init-server\" \"npm run init-client\"" }
两个服务会在同一个终端内同时输出日志,concurrently默认会添加颜色和命令名前缀,方便区分不同服务的输出。
二、在独立终端标签页启动服务
该需求需要根据你使用的终端系统配置脚本,不同终端打开新标签页的命令存在差异:
情况1:Mac/Linux(Terminal/iTerm2)
利用终端自带的脚本命令打开新标签页:
修改scripts为:
"scripts": { "init-client": "cd ./client && npm start", "init-server": "cd ./server && npm run dev", "start-server-tab": "osascript -e 'tell application \"Terminal\" to do script \"cd '$(pwd)' && npm run init-server\"'", "start-client-tab": "osascript -e 'tell application \"Terminal\" to do script \"cd '$(pwd)' && npm run init-client\"'", "start": "npm run start-server-tab && npm run start-client-tab" }
如果是Linux GNOME终端,将osascript命令替换为:
gnome-terminal --tab --title="Server" -- bash -c "cd $(pwd) && npm run init-server; exec bash"
情况2:Windows(PowerShell/CMD)
PowerShell环境下用Start-Process打开新标签页:
修改scripts为:
"scripts": { "init-client": "cd ./client && npm start", "init-server": "cd ./server && npm run dev", "start-server-tab": "start powershell -Command \"cd '$(pwd)' && npm run init-server\"", "start-client-tab": "start powershell -Command \"cd '$(pwd)' && npm run init-client\"", "start": "npm run start-server-tab && npm run start-client-tab" }
CMD环境下则使用start命令:
start cmd /k "cd %cd% && npm run init-server"
内容的提问来源于stack exchange,提问作者24sharon
相关产品推荐
相关产品推荐

