es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PM2 con módulo ES. Error: ERR_REQUIRE_ESM

Mi archivo package.json se ve algo así:

{
...
  "main": "index.js",
  "type": "module",
  "scripts": {
    "devStart": "pm2 start ecosystem.config.js --env dev --watch",
    "prodStart": "pm2 start ecosystem.config.js --env prod --watch",
    "reload": "pm2 reload ecosystem.config.js",
    "stop": "pm2 stop ecosystem.config.js",
    "end": "pm2 delete ecosystem.config.js"
  },
...
}

He activado los módulos ES con "type": "module", como puede ver.

Y el archivo ecosystem.config.js, ya lo sabe, es:

module.exports = {
  apps : [{
    name   : "app1",
    script : "./app.js",
    env_production: {
       NODE_ENV: "production"
    },
    env_development: {
       NODE_ENV: "development"
    }
  }]
}

Entonces, cuando ejecuto el comando npm run devStart, se produce un error:

Archivo ecosystem.config.js mal formado

código: ‘ERRREQUIREESM’

Funciona cuando solo elimino la parte "type": "module" del archivo de configuración.

¿Cómo puedo solucionar esto?

node -v: v16.13.0

pm2 -v: 5.1.2

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar relacionado con la forma en que Node.js maneja los módulos ES. Cuando especificas "type": "module" en tu archivo package.json, Node.js trata todos tus archivos como módulos ES, incluido el archivo ecosystem.config.js.

    Para solucionar el problema, puedes usar la extensión de archivo .cjs para tu archivo de configuración en lugar de .js. Esto le dirá a Node.js que trate el archivo como un módulo CommonJS, que es el formato que espera PM2.

    Aquí tienes un archivo actualizado de ecosystem.config.cjs que debería funcionar:

    module.exports = {
      apps: [
        {
          name: "app1",
          script: "./app.js",
          env: {
            NODE_ENV: "production"
          },
          env_dev: {
            NODE_ENV: "development"
          }
        }
      ]
    };
    

    Y actualiza tu sección scripts en package.json en consecuencia:

    {
      "scripts": {
        "devStart": "pm2 start ecosystem.config.cjs --env dev --watch",
        "prodStart": "pm2 start ecosystem.config.cjs --env prod --watch",
        "reload": "pm2 reload ecosystem.config.cjs",
        "stop": "pm2 stop ecosystem.config.cjs",
        "end": "pm2 delete ecosystem.config.cjs"
      }
    }
    

    Esto debería permitirte ejecutar npm run devStart sin problemas.

    Nota: Si prefieres utilizar la extensión .js para tu archivo de configuración, puedes agregar "type": "commonjs" al campo "exports" de tu archivo package.json para indicar a Node.js que trate tu archivo de configuración como un módulo CommonJS.

Comments are closed.