You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac环境下NodeJS+Express启动端口被占用问题解决及热重载模块推荐

解决「Port is already in use」端口占用问题

方法一:手动杀掉占用端口的进程(临时快速解决)

Mac系统下用lsof命令就能轻松定位到占用端口的进程:

  1. 先执行命令查询目标端口的进程信息,假设你的项目用的是3000端口:
    lsof -i :3000
    
    执行后会列出占用该端口的进程详情,找到PID列对应的数字(这是进程的唯一ID)。
  2. 用kill命令强制终止该进程:
    kill -9 你的PID数字
    
    比如PID是1234,就执行kill -9 1234,之后再启动项目就不会有端口占用提示了。

方法二:代码层面自动处理(一劳永逸)

不想每次手动杀进程的话,可以修改Express的启动代码,让它自动检测并切换可用端口:
打开你的./bin/www(或项目启动入口文件),把固定端口的逻辑改成这样:

const port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

const server = http.createServer(app);

// 监听端口失败时自动尝试下一个可用端口
server.on('error', (error) => {
  if (error.code === 'EADDRINUSE') {
    const newPort = parseInt(port) + 1;
    console.log(`Port ${port} is in use, trying ${newPort}...`);
    server.listen(newPort);
  } else {
    throw error;
  }
});

server.listen(port);

这样下次启动时如果端口被占用,程序会自动尝试下一个端口,不用手动修改配置了。

好用的热重载模块推荐

开发时频繁手动重启项目太折腾,给你推荐几个实用的热重载工具:

1. nodemon(最常用、轻量易上手)

这是Node.js开发圈最流行的热重载工具,能自动监听文件变化并重启服务,配置简单:

  • 安装:
    npm install --save-dev nodemon
    
  • 使用:在package.json的scripts里新增一个dev命令:
    "scripts": {
      "start": "node ./bin/www",
      "dev": "nodemon ./bin/www"
    }
    
    之后启动项目就用npm run dev,修改代码后nodemon会自动重启服务,省去手动执行npm start的麻烦。

2. node-dev

和nodemon功能类似,但它会缓存编译结果,进程重启速度更快一点,适合文件较多的项目:

  • 安装:
    npm install --save-dev node-dev
    
  • 使用:同样修改package.json的scripts:
    "scripts": {
      "dev": "node-dev ./bin/www"
    }
    

3. ts-node-dev(TypeScript项目专属)

如果你的项目用了TypeScript,这个工具可以同时处理TypeScript编译和热重载,不用单独跑tsc编译命令:

  • 安装:
    npm install --save-dev ts-node-dev
    
  • 使用:
    "scripts": {
      "dev": "ts-node-dev ./src/www.ts"
    }
    

个人最推荐nodemon,足够满足绝大多数Express项目的开发需求,社区支持好,遇到问题也容易找到解决方案。

内容的提问来源于stack exchange,提问作者VMCO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:08:57