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.

Ejecuta pm2 con módulos ES.

¿Cómo puedo usar pm2 en combinación con un paquete basado en ES Module (tipo: “module”)?

Investigué preguntas similares sin ninguna ayuda útil (algunos dicen que no funciona en Windows, pero estoy usando Linux).

Siempre recibo el siguiente error:

Error [ERR_REQUIRE_ESM]: require() del módulo ES /opt/app/server/lib/src/index.js no es compatible.
0|any| En su lugar, cambie el require de index.js en null a una importación () dinámica que está disponible en todos los módulos CommonJS.

Mi archivo ecosystem.config.js se ve así:

const os = require(‘os’);
module.exports = {
apps: [{
port : 3000,
name : “any”,
script : “lib/src/index.js”,
watch : true,
instances : os.cpus().length,
exec_mode : ‘fork’,
env: {
NODE_ENV: “production”,
}
}]
}

index.js es un módulo ES que utiliza la sintaxis “import”. ¿Cómo puedo decirle a pm2 que use esta forma de importar?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para utilizar pm2 en combinación con un paquete basado en ES Module (tipo: “module”), puedes hacer los siguientes cambios:

    1. Edita la ruta del “script” en el archivo ecosystem.config.js para reflejar la ruta al archivo que utiliza la sintaxis de “import”. Por ejemplo, cambia “lib/src/index.js” a “src/index.js”.
    2. Agrega la bandera “–experimental-modules” a la propiedad “node_args” en el archivo ecosystem.config.js. Esta bandera habilita el uso de módulos ES en Node.js.

      const os = require('os');
      module.exports = {
          apps: [{
              port      : 3000,
              name      : "any",
              script    : "src/index.js",
              watch     : true,           
              instances : os.cpus().length,
              exec_mode : 'fork',
              node_args : '--experimental-modules',
              env: {
                  NODE_ENV: "production",
              }
          }]
      }
      

    3. En lugar de utilizar la sintaxis de “require” para importar el módulo ES, utiliza la sintaxis de “import”. Por ejemplo, cambia:
      const express = require('express');
      

      a

      import express from 'express';
      

    Con estos cambios, pm2 debería poder utilizar los módulos ES en tu aplicación de Node.js.

Comments are closed.