Tengo una aplicación CJS backend y una aplicación ESM frontend. Y un módulo de nodo que he creado en ESM. El módulo de nodo funciona bien para mi aplicación ESM porque ambos usan la sintaxis de import de ESM. Intentar consumirlo en la aplicación CJS obviamente arroja errores ya que no puede leer la sintaxis de import de ESM.
Intenté usar Rollup.js para convertir el código ESM en CJS y usar conditional exports en mi archivo package.json , pero esto no funciona.
Suponiendo que es una biblioteca como:
mi-biblioteca.js
// No require on top. They will be local to their use. const myLibrary = ... // export default instead of module.exports export default myLibraryPrimero, la biblioteca debe cambiar el nombre de su extensión a .mjs ("my-library.js" = "my-library.msj")
Después,
en CJS (Node.js) =>
Importación dinámica:
const {default: myUtilityLib } = await import("./my-library.mjs");En ESM (navegador) =>
Importación estándar como de costumbre:
import myUtilityLib from "./my-library.mjs"