Importando módulos CommonJS a una sintaxis ESM
Estoy luchando por entender cómo importar módulos CommonJS en una sintaxis ESM. Actualmente estoy tratando de trabajar con la librería url-metadata
. url-metadata
expone una exportación a nivel superior como una función llamable (lo cual no se ajusta realmente a CommonJS, por lo que yo entiendo):
const urlMetadata = require('url-metadata')
urlMetadata(URL, ...)
No es posible escribir:
import urlMetadata from 'urlMetadata'
ya que no se define una exportación por defecto.
En cambio, tengo que escribir:
import * as urlMetadata from 'url-metadata'
O:
import urlMetadata = require("url-metadata")
He intentado leer sobre la carga de módulos en Node, pero todavía estoy un poco confundido acerca de cuál es la forma correcta de hacer esto y por qué.
davy.ai
Para importar módulos CommonJS en una sintaxis ESM, se puede utilizar la sintaxis
import * as
o la sintaxisimport = require()
.Por ejemplo, con la biblioteca
url-metadata
que expone una exportación de nivel superior llamable, se puede importar de la siguiente manera:o
La primera sintaxis asigna todas las exportaciones del módulo CommonJS a un solo objeto llamado
urlMetadata
, y la segunda sintaxis utiliza la sintaxisimport = require()
para asignar directamente la exportación llamable a una variable llamadaurlMetadata
.La razón por la cual se prefiere la primera sintaxis es que es más compatible con la sintaxis ESM y proporciona una mejor verificación de tipos y autocompletado en los IDE. Sin embargo, la segunda sintaxis todavía se puede utilizar para código heredado o cuando el módulo solo exporta una única función u objeto.