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

修改Node.js源码重启PM2后网页未更新生效如何解决

问题场景

修改Node.js项目源码后,执行PM2服务停止、重启操作,网页端未同步体现代码变更效果,当前使用的pm2.config.yml配置如下:

apps:
  - name: 'api'
    script: 'yarn start'
    cwd: './api'
    log_file: '~/logs/web/app.log'
    env:
      NODE_ENV: 'production'
  - name: 'worker'
    script: 'yarn start-worker'
    cwd: './api'
    log_file: '~/logs/web/worker.log'
    env:
      NODE_ENV: 'production'
排查与修复方案
  • PM2未正确加载新配置,旧进程未被完全替换
    常规pm2 restart命令会沿用进程首次启动时的配置缓存,哪怕本地配置文件、代码已经修改,也不会主动加载新内容。需要完全删除旧进程后重新通过配置文件启动:

    # 停止并删除所有已存在的PM2进程
    pm2 delete all
    # 确认进程列表已清空
    pm2 list
    # 在pm2.config.yml所在目录执行启动命令,加载最新配置
    pm2 start pm2.config.yml
    # 保存当前进程列表,避免设备重启后配置丢失
    pm2 save
    
  • 未重新执行生产构建,服务运行的是旧编译产物
    生产环境下yarn start通常指向构建后的dist目录代码,直接修改src目录下的源码不会自动同步到编译产物中,必须先执行构建命令生成新的产物,再重启服务:

    # 进入项目api目录
    cd ./api
    # 执行生产环境构建
    yarn build
    # 构建完成后再重启PM2进程
    
  • Node残留进程占用端口,新服务未成功启动
    执行stop命令时可能存在异常,导致旧Node进程没有真正退出,持续占用服务端口,新拉起的PM2进程绑定端口失败,所有请求依旧被旧进程处理。排查操作:

    # 替换为你的服务实际使用的端口号,比如常见的3000
    lsof -i :3000
    # 若查询到未被PM2管理的残留node进程,直接强制杀死
    kill -9 <查询到的残留进程PID>
    # 确认端口完全释放后,再重新启动PM2服务
    
  • 缓存导致返回旧内容
    反向代理层(Nginx)、CDN、本地浏览器都可能缓存旧的接口/静态资源响应,先通过浏览器无痕模式、Ctrl+F5强制刷新测试,同时检查代理、CDN的缓存规则,排除缓存影响。

  • 相对路径配置导致PM2加载错项目目录
    配置中cwd: './api'是相对路径,以执行pm2 start命令时所在的目录为基准,如果启动命令不是在pm2.config.yml所在目录执行,PM2会定位到错误的项目路径,运行其他位置的旧代码。可以将cwd改为项目绝对路径,或者每次启动都切换到配置文件所在目录执行命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:09:21