How to watch and reload an ExpressJS app with pm2

See this solution in Stack Overflow

The problem is relative to the path where pm2 is watching, and if it is relative to the execution file or the actual root path of the project.


2021 Feb.

Things have changed a bit now. Gave a full example below from my project. Below works:

1 . Create config file. File: 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 . Run server (dev/ prod)

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

3 . More information :

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