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
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 archivopackage.json
, Node.js trata todos tus archivos como módulos ES, incluido el archivoecosystem.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:Y actualiza tu sección
scripts
enpackage.json
en consecuencia: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 archivopackage.json
para indicar a Node.js que trate tu archivo de configuración como un módulo CommonJS.