Estoy usando un paquete de carga al que paso el nombre de un módulo loadee y require() s él.
El cargador usa require() de CJS para requerir dinámicamente el loadee , pero el loadee es un módulo ES. Debido a esto, Node.js arroja un error.
Error [ERR_REQUIRE_ESM]: require() of ES Module LOADEE from LOADER not supported. Instead change the require of LOADEE in LOADER to a dynamic import() which is available in all CommonJS modules.Ni el cargador ni el cargador son administrados por mí, por lo que no puedo modificarlos. Yo tampoco puedo evitar usarlos.
Por supuesto, puedo escribir un loadee intermediario, escrito en CJS (para que el cargador pueda cargarlo), que luego carga el loadee verdadero y lo devuelve al cargador . Pero no sé cómo hacerlo, ya que la import() es asíncrona (devuelve una promesa), pero el require() del cargador está sincronizado y espera el módulo cargado inmediatamente.
¿Hay algo más que pueda hacer para que esto funcione?
En caso de que la descripción que di no sea lo suficientemente clara, estoy tratando de publicar algunos fragmentos mínimos de código para mostrar lo que está sucediendo:
module.exports = function(pkg) { const x = require(pkg) console.log(x) } default export const x = 1 import load from 'LOADER' load('LOADEE') Cuando ejecuto node ./index.js esto es lo que obtengo:
Error [ERR_REQUIRE_ESM]: require() of ES Module LOADEE from LOADER not supported. Instead change the require of LOADEE in LOADER to a dynamic import() which is available in all CommonJS modules.Ya encontré preguntas similares sobre el desbordamiento de pila. Por ejemplo:
Error: no se admite require () de módulos ES al importar node-fetch
Error [ERR_REQUIRE_ESM]: no se admite require() del módulo ES
Explican cómo usar import() para importar dinámicamente un módulo. Pero eso no me ayuda ya que no puedo cambiar la llamada require() en el cargador y no sé cómo envolverlo con una import() .
¿Hay algo que pueda hacer para que esto funcione?