如何使用 pm2 观看和重新加载 ExpressJS 应用程序

How to watch and reload an ExpressJS app with pm2

我正在开发一个 ExpressJS 应用程序。 我使用pm2加载它:

myapp$ pm2 start bin/www

这很好用,只是添加 --watch 标志似乎不起作用;每次我更改 JS 源代码时,我都需要明确地重新启动它以使我的更改生效:

myapp$ pm2 restart www

我做错了什么?我在非 ExpressJS 应用程序中尝试了 --watch 标志,它按预期工作。

看到这个

问题是相对于pm2 watch的路径,如果是相对于执行文件或者项目的实际根路径。

您需要为 --watch 选项指定应用程序位置

myapp$ pm2 start bin/www --watch /your/location/to/app

2021 年 2 月

现在情况发生了一些变化。下面给出了我项目中的完整示例。以下作品:

1。创建配置文件。文件:ecosystem.config.js

module.exports = {
  apps: [
    {
      name: 'api',
      script: './bin/www', // --------------- our node start script here like index.js

      // ------------------------------------ watch options - begin
      watch: ['../'],
      watch_delay: 1000,
      ignore_watch: ['node_modules'],
      watch_options: {
        followSymlinks: false,
      },
      // ------------------------------------ watch options - end

      env: {
        NODE_ENV: 'development',
        PORT: 3001,
        DEBUG: 'api:*',
        MONGODB_URI:
          'mongodb://localhost:27017/collection1?readPreference=primary&ssl=false',
      },
      env_production: {
        NODE_ENV: 'production',
      },
    },
  ],
  deploy: {
    production: {
        // user: "SSH_USERNAME",
        // host: "SSH_HOSTMACHINE",
    },
  },
};

2。 运行 服务器(开发/生产)

pm2 start ecosystem.config.js
pm2 start ecosystem.config.js --env production

3。更多信息:

https://pm2.keymetrics.io/docs/usage/watch-and-restart/

我从未设法使默认手表设置在 Ubuntu 中起作用,但是通过高级手表选项使用轮询有效:

  "watch":  true,
  "ignore_watch" : ["node_modules"],
  "watch_options": {
    "usePolling": true,
    "interval": 1000
  }

更多信息:

https://github.com/buunguyen/PM2/blob/master/ADVANCED_README.md#watch--restart

https://github.com/paulmillr/chokidar#api