Node.js 本身是单线程运行的,默认不支持代码热更新(即在应用运行时不重启服务就能更新代码),但有几种方法可以实现类似热更新的效果:
推荐工具: - PM2 (推荐) - Forever - Nodemon (开发环境)
PM2 热更新步骤:
# 安装 PM2
npm install -g pm2
# 启动应用
pm2 start app.js
# 当代码修改后,执行热更新
pm2 reload app
通过 Node.js 内置的 cluster 模块实现零停机更新:
const cluster = require('cluster');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// 主进程
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
// 监听文件变化
require('fs').watch('./app.js', () => {
for (const id in cluster.workers) {
cluster.workers[id].kill();
cluster.fork();
}
});
} else {
// 工作进程
require('./app');
}
对于生产环境,建议: 1. 使用 PM2 的 cluster 模式 2. 结合 CI/CD 实现自动化部署 3. 对于关键服务,考虑使用 Kubernetes 等容器编排系统实现无缝更新
您需要哪种具体场景的热更新方案?我可以提供更详细的指导。