1. 事故现场
# MacOS
❯ npm run serve
> blog@0.0.0 serve /Users/bigcat/webpage
> vite preview
events.js:353
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use 127.0.0.1:5000
at Server.setupListenHandle [as _listen2] (net.js:1318:16)
at listenInCluster (net.js:1366:12)
at doListen (net.js:1503:7)
at processTicksAndRejections (internal/process/task_queues.js:83:21) Emitted 'error' event on Server instance at:
at emitErrorNT (net.js:1345:8)
at processTicksAndRejections (internal/process/task_queues.js:82:21) { code: 'EADDRINUSE', errno: -48, syscall: 'listen', address: '127.0.0.1', port: 5000 } npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! blog@0.0.0 serve: `vite preview` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the blog@0.0.0 serve script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in: npm ERR! /Users/amazm/.npm/_logs/2021-05-17T04_04_50_846Z-debug.log
2. 问题分析
只是改了页面 <p></p>
文本,保存没有热加载更新,在终端按 ⌃ Z
退出,重启时报错。
报告没看全,直接往浏览器扔 ERR!
红色信息,一堆人在说卸载重装,把项目整个底朝天
rm -rf node_modules
rm -rf package-lock.json
npm cache clear --force
npm install
太可怕了 😱
凭男人的直觉,它应该属于端口占用问题,我尝试杀掉进程,结果就好了,回过来看报告,确实提到,位置在中间 ——
Error: listen EADDRINUSE: address already in use 127.0.0.1:5000
这说明,我被语法高亮的颜色误导了——
终端高亮不可全信,我们要把报告看全。
下次关闭服务器,应该使用 ⌃ C
3.解决办法
查看端口进程
lsof -i:5000
❯ lsof -i:5000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Google 52545 bigcat 28u IPv4 0x90356eb4a265be37 0t0 TCP localhost:54155->localhost:commplex-main (ESTABLISHED)
node 95689 bigcat 24u IPv4 0x90356eb49246a9e7 0t0 TCP localhost:commplex-main (LISTEN)
node 95689 bigcat 29u IPv4 0x90356eb4a0fca85f 0t0 TCP localhost:commplex-main->localhost:53952 (CLOSE_WAIT)
全部杀掉
lsof -nti:5000 | xargs kill -9
lsof
参数:
-n
排除地址数字-t
只返回端口号数字-i
按端口号匹配xargs
临时变量
kill
参数:
-9
闷声不响地斩杀(Non-catchable, non-ignorable kill)
4.效果演示
❯ npm run serve
> blog@0.0.0 serve /Users/bigcat/webpage
> vite preview
vite v2.3.2 build preview server running at:
> Local: http://localhost:5000/
> Network: use `--host` to expose