
查端口谁在占着:lsof 和 netstat 怎么选
VS Code 启动调试或 Live Server 时卡在“端口已被占用”,第一反应不是重启,而是立刻定位进程。macOS/Linux 用 lsof -i :3000(把 3000 换成你实际报错的端口号);Windows 用 netstat -ano | findstr :3000。注意:Windows 上 netstat 返回的 PID 要去任务管理器“详细信息”页里手动找,别只看名字——很多 Node 进程都叫 node.exe,靠 PID 才准。
如果 lsof 报“command not found”,macOS 可能没装 Xcode 命令行工具,运行 xcode-select –installnetstat 在较新 Windows 版本里默认不带,可改用 Get-NetTCPConnection -LocalPort 3000(PowerShell)别直接杀所有 node.exe,可能干掉你正在跑的其他项目
VS Code 自己改端口:改哪里最稳
Live Server、Debugger、甚至 Remote-SSH 的端口冲突,根源常是配置写死。优先改 VS Code 插件级配置,而不是全局改系统端口。
Live Server:打开 VS Code 设置(Cmd+, 或 Ctrl+,),搜 liveServer.settings.port,填个空闲端口比如 5501Node.js 调试:在 .vscode/launch.json 里确认 port 字段没硬编码成 9229,改成 9230 或更高Remote-SSH:连接配置里加 "remote.SSH.defaultForwardedPorts": ["3001", "3002"],避免自动抢 3000改完记得关掉已打开的调试会话再重试,旧进程不会自动 reload 配置
临时释放端口:kill 不等于暴力 reboot
找到 PID 后,杀进程要克制。直接 kill -9 或任务管理器“结束任务”容易留僵尸或文件锁。
macOS/Linux:先 kill <code>PID(温和退出),等 2 秒没反应再 kill -9 <code>PIDWindows:用 taskkill /pid <code>PID /f,但加 /t 参数(taskkill /pid <code>PID /t /f)才能顺带干掉子进程,尤其 Node 子进程常漏杀如果端口被系统服务占了(比如 Windows 的 svchost.exe 占 80 或 443),别硬杀,换端口更安全
防复发:端口别写死在代码或配置里
很多项目在 package.json 的 scripts 里写死 react-scripts start –port 3000,下次开新终端又撞上。真正省心的做法是让端口“动态可选”。
React/Vite 等脚手架支持环境变量:启动前设 PORT=3001 npm start,比改 package.json 快得多Express/Koa 服务代码里别写 app.listen(3000),改成 app.listen(process.env.PORT || 3000)VS Code 的 launch.json 中 port 字段可引用变量:"port": "${env:PORT}",然后在终端里统一设 export PORT=3002
端口冲突本质是资源竞争,不是 VS Code 的 bug。真要彻底避开,记住一点:本地开发别迷信默认端口,3000、8080、8000 这些早被各种工具预占了,随手加个 1 更省事。

评论(0)