如何直接对Nuxt构建后的应用使用PM2的watch监听功能?
问题根因
- 你当前
ecosystem.config.js中的watch配置处于注释状态,即使启动命令追加了--watch参数,PM2默认的监听规则也不会精准匹配Nuxt构建后的核心生效产物,自然不会触发重启逻辑。 - Nuxt执行
npm run build后,实际生效的运行代码存放在.nuxt(Nuxt2)或.output(Nuxt3)目录下,默认的全局监听规则会漏掉这类专项构建产物目录的变更。
修复步骤
1. 修改ecosystem.config.js配置
取消watch相关配置的注释,指定监听的产物目录,添加忽略规则和延迟重启逻辑,参考配置如下:
const path = require('path'); module.exports = { apps : [{ name: 'UI1', exec_mode: 'cluster', instances: 0, script: path.join(__dirname, '../app_build/node_modules/nuxt/bin/nuxt.js'), args: 'start', watch: [ path.join(__dirname, '../app_build/.nuxt'), // Nuxt2填这个 // path.join(__dirname, '../app_build/.output'), // Nuxt3填这个,二选一 ], ignore_watch: ['node_modules', 'logs', '.git'], watch_delay: 3000, // 变更后延迟3秒重启,避免构建过程中频繁触发重启 env:{ HOST: '0.0.0.0', }, cwd: path.join(__dirname, '../app_build'), }, { name: 'UI0', script: path.join(__dirname, '../app_build/node_modules/nuxt/bin/nuxt.js'), args: 'start', watch: [ path.join(__dirname, '../app_build/.nuxt'), // Nuxt2填这个 // path.join(__dirname, '../app_build/.output'), // Nuxt3填这个,二选一 ], ignore_watch: ['node_modules', 'logs', '.git'], watch_delay: 3000, env:{ HOST: '0.0.0.0', }, cwd: path.join(__dirname, '../app_build'), }], };
2. 重启PM2实例生效配置
首先清理原有实例:pm2 delete UI0
再用修改后的配置启动,不需要额外加--watch参数:pm2 start ecosystem.config.js --only UI0
后续你执行npm run build完成构建后,PM2会自动检测到产物目录变更,延迟3秒后自动重启应用,无需手动执行pm2 restart命令。
注意事项
- PM2低版本的cluster模式对watch功能兼容有问题,如果你要在cluster模式下使用watch,建议先升级PM2到最新稳定版。
- 生产环境不建议长期开启watch功能,生产环境更推荐在CI/CD构建完成后主动执行
pm2 reload <实例名>实现零宕机更新,watch仅适合开发、测试环境使用。
内容的提问来源于stack exchange,提问作者niddddddfier
相关产品推荐
相关产品推荐

