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.

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é.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para importar módulos CommonJS en una sintaxis ESM, se puede utilizar la sintaxis import * as o la sintaxis import = require().

    Por ejemplo, con la biblioteca url-metadata que expone una exportación de nivel superior llamable, se puede importar de la siguiente manera:

    import * as urlMetadata from 'url-metadata';
    

    o

    import urlMetadata = require('url-metadata');
    

    La primera sintaxis asigna todas las exportaciones del módulo CommonJS a un solo objeto llamado urlMetadata, y la segunda sintaxis utiliza la sintaxis import = require() para asignar directamente la exportación llamable a una variable llamada urlMetadata.

    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.

Comments are closed.