端口3000已被占用:
[nodemon] 应用程序崩溃 - 等待文件更改后再启动...
我该如何解决这个问题?
[nodemon] 应用程序崩溃 - 等待文件更改后再启动...
我该如何解决这个问题?
首先,让我们看看如何结束占用端口的进程。
使用lsof
命令,我们可以获取具有给定端口的PID:
$ lsof -i :3000 -t
12345
那么我们只需执行以下命令即可杀死该进程:
$ kill 12345
让我们将其转换为一行代码:
lsof -i :3000 -t | xargs kill
如果您正在使用环境变量来设置服务器端口,我们可以指定该变量而不是硬编码值:
lsof -i :${PORT} -t | xargs kill
lsof -i :${PORT:-3000} -t | xargs kill
除非您在Windows Subsystem for Linux (WSL)上运行nodemon,否则lsof
在Windows上不可用。但是,netstat
在Windows shell中可用:
netstat -ano | findstr :3000
这将返回使用端口3000的进程PID,我们可以使用tskill
命令杀死该进程:
tskill 12345
SIGTERM
以便在nodemon触发tskill
命令时进行优雅的关闭,那么Windows将在你的应用程序有机会触发process.on('SIGTERM')
事件处理程序之前无条件终止你的进程。taskkill /F /T /PID 12345
Nodemon可以通过nodemon.json
配置文件设置事件钩子:
{
"events": {
"crash": "sh -c 'lsof -i :${PORT:-3000} -t | xargs kill'"
}
}
sh -c 'lsof -i :${PORT:-3000} -t | xargs kill
命令,从而杀死它生成的子进程,以保持端口开放。将kill-port
节点包作为dev依赖项安装:
npm install kill-port --save-dev
创建一个名为 nodemon.json
的文件,放在你的项目根目录下,文件内容如下:{
"events": {
"restart": "kill-port 3000",
"crash": "kill-port 3000"
},
"delay": "1500"
}
然后,在您的package.json
文件中,应该有类似以下的内容: "scripts": {
"start-dev": "nodemon app.js",
}
然后使用以下命令以开发模式启动您的应用程序:
npm run start-dev
kill-port
安装为全局。 - jslipknot解决此问题的最佳方法是使用以下命令直接关闭端口。
fuser -n tcp -k 3000
我曾经遇到过类似的问题,即使我关闭了终端,nodemon仍然继续监视文件更改。我停止了所有的node进程(不仅仅是使用该端口的node进程)。
netstat -aon | findstr '[port_number]'
看起来3000端口正在使用中。您可以终止使用3000端口的进程,或者将节点的端口从3000更改为任何其他端口。