Cargadores ESM: Mejorando la carga de módulos en Node.js

This ad is not shown to multipass and full ticket holders
JSNation US
JSNation US 2025
November 17 - 20, 2025
New York, US & Online
See JS stars in the US biggest planetarium
Learn More
In partnership with Focus Reactive
Upcoming event
JSNation US 2025
JSNation US 2025
November 17 - 20, 2025. New York, US & Online
Learn more
Bookmark
Rate this content

El soporte nativo de ESM para Node.js fue una oportunidad para que el proyecto Node.js lanzara soporte oficial para mejorar la experiencia de carga de módulos, para habilitar casos de uso como la transpilación sobre la marcha, la simulación de módulos, el soporte para cargar módulos desde HTTP y la monitorización.


Mientras que CommonJS tiene soporte para todo esto, nunca fue oficialmente soportado y se hizo hackeando el código de ejecución de Node.js. ESM ha solucionado todo esto. Examinaremos la arquitectura de la carga de ESM en Node.js, y discutiremos la API del cargador que soporta su mejora. También veremos características avanzadas como la cadena de cargadores y la ejecución fuera de hilo.

This talk has been presented at JSNation 2023, check out the latest edition of this JavaScript Conference.

FAQ

Los cargadores de módulos en Node.js son herramientas que mejoran y transforman la resolución de URLs y la lectura de archivos durante la carga de módulos. Se utilizan para personalizar el proceso de carga, como la resolución de rutas alternativas o la carga directa desde URLs HTTP.

Para cargar código TypeScript directamente, se puede usar un cargador personalizado que maneje archivos .ts, permitiendo que Node.js los procese sin necesidad de transpilar previamente a common.js.

Sí, es posible encadenar varios cargadores en Node.js, donde cada cargador puede pasar la responsabilidad al siguiente, permitiendo una variedad de transformaciones y resoluciones personalizadas durante la carga de módulos.

La principal diferencia radica en cómo se manejan las URLs y la seguridad. Los navegadores restringen el acceso a ciertos recursos por razones de seguridad, mientras que Node.js permite un control más flexible y directo sobre las rutas y los sistemas de archivos.

ESM (ECMAScript Modules) es el sistema de módulos estándar de JavaScript, que ahora es nativo de Node.js. Utiliza la sintaxis de 'export' e 'import' para la exportación e importación de módulos.

ESM permite una resolución de URL y una carga de archivos más estructurada, operando con un sistema que resuelve URLs y lee archivos en disco de forma más organizada que CommonJS, que es más limitado en términos de resolución y carga dinámica.

Gil Tayar
Gil Tayar
22 min
05 Jun, 2023

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Los cargadores ESM mejoran la carga de módulos en Node.js resolviendo URLs y leyendo archivos desde el disco. Los cargadores de módulos pueden sobrescribir módulos y cambiar cómo se encuentran. Mejorar la fase de carga implica cargar directamente desde HTTP y cargar código TypeScript sin construirlo. El cargador en la URL del módulo maneja la resolución de URL y utiliza fetch para obtener el código fuente. Los cargadores pueden encadenarse para cargar desde diferentes fuentes, transformar el código fuente y resolver las URL de manera diferente. El futuro de las mejoras en la carga de módulos es prometedor y fácil de usar.

1. Introducción a ESM y la carga de módulos en Node.js

Short description:

Cargadores ESM, Mejorando la carga de módulos en Node.js. ESM es el sistema estándar de módulos de JavaScript nativo de Node.js. La carga de módulos en Node.js implica ejecutar el código dentro de un módulo. Los usuarios de TypeScript necesitan transpilar a common.js. La ejecución de módulos en Node.js implica resolver URLs.

♪♪ Cargadores ESM, Mejorando la carga de módulos en Node.js. Hola, soy Gil Tayar. Soy bastante viejo. Volvemos a los años 80. Siempre fui un desarrollador. Hice muchas cosas, pero básicamente eso es lo que amo hacer. Otra cosa que amo hacer es usar NPM y ESM y todo eso para mejorar mi código usando modularidad extrema y código de pruebas. Actualmente soy ingeniero de software en Microsoft y trabajo en cosas interesantes como el Explorador de Datos de Azure, que es un motor de base de datos de análisis en tiempo real. Nada que ver con ESM.

Bien, aclaremos algunas cosas antes de hablar sobre cómo mejorar la carga de módulos. Hablemos de qué es ESM. ESM es el sistema estándar de módulos de JavaScript y ahora es nativo de Node.js. Así que si antes teníamos common.js module.export para exportar algo y require para importarlo, en ESM, usas la sintaxis estándar export e import para hacer la exportación e importación de módulos. La sintaxis nativa funciona en Node.js, la mayoría de las personas todavía usan common.js pero ESModule se está utilizando cada vez más.

¿Qué es la carga de módulos en Node.js? Hablemos un poco sobre esa carga de módulos. En primer lugar, ¿qué es un módulo? Un módulo es básicamente un archivo glorificado, simplemente se llama módulo. Así que cuando ejecuto un módulo o importo un módulo, básicamente estoy ejecutando el código dentro del módulo, es una carga de módulo de ejecución glorificada. Así que incluso cuando estoy importando module.js en la parte superior, está ejecutando module.js en la parte inferior y luego continúa ejecutando main.js. Todo se trata de ejecución glorificada. En primer lugar, una nota para los usuarios de TypeScript, si estás usando TypeScript en Node.js, estás usando la sintaxis de importación-exportación pero probablemente estás transpilando eso a common.js porque ESM es bastante nuevo en el juego. Así que TypeScript generalmente, por defecto, transpila a common.js. Así que si estás probando todas las cosas que estoy haciendo aquí con los cargadores ASM en tu código de TypeScript, no funcionará. Tienes que no traducir el ESM usando module.node.next. Y tienes un ejemplo en el repositorio de GitHub, no te preocupes, al final, tendrás un enlace al repositorio de GitHub con un bonito código QR y un enlace a esta presentación. Vale. ¿Cuáles son las fases de la ejecución del módulo? ¿Cómo ejecuta Node.js un módulo? No es simple. En primer lugar, resolvemos la URL. Así que si estamos haciendo import.slash module.js, tenemos que resolverlo a la ruta absoluta en el disco. Y ESM no habla de rutas.

2. Carga de módulos ESM en Node.js

Short description:

La carga de módulos ESM en Node.js implica resolver URLs y leer archivos desde el disco. Carga recursivamente todos los módulos en el archivo sin ejecutarlos. Una vez que todos los archivos están cargados, ejecuta el código de los módulos en el orden correcto.

Habla de URLs. Usualmente las URLs son URLs de archivo, pero son URLs de todos modos. Una vez que resuelven la URL, una vez que Node.js resuelve la URL, lee el archivo desde el disco. Y esto es diferente de CommonJS, pero no hablemos de qué, carga recursivamente todos los modules en el archivo sin ejecutarlos.

Observa que no hemos ejecutado el módulo ESM de arriba. Una vez que ha cargado recursivamente todos los archivos, ejecuta el código de todos los modules de abajo hacia arriba en el orden correcto. Estas son las fases de la ejecución del módulo en Node.js. Y básicamente en los navegadores también, en cualquier lugar donde se implemente ESM, estas son las fases. Y esto es diferente de CommonJS, no entramos en dónde.

3. Cargadores de Módulos y Anulación de Módulos

Short description:

Los cargadores de módulos mejoran las fases de resolución y carga en Node.js. Ejemplos incluyen pnpm, que cambia cómo se encuentran los módulos, y los mapas de importación para anular especificadores desnudos. Podemos escribir un cargador para anular módulos especificando un cargador usando la bandera --loader. El archivo loader.js lee el archivo overrides.json y exporta una función de resolución que toma el especificador del módulo como parámetro.

Bien, hablemos de los cargadores de módulos. Los cargadores de módulos mejoran los primeros dos, mejoran, cambian y transforman cómo Node.js realiza una resolución y cómo lee el archivo, el módulo. Hablemos de mejorar la fase de resolución, daremos un ejemplo y luego daremos un ejemplo para la fase de carga.

Hablemos de la fase de resolución. Demos dos ejemplos. Uno es pnpm, es un gestor de paquetes como yarn y npm, pero pnpm cambia la forma en que se encuentran los módulos. Así que los busca en el repositorio central de caché en tu disco. Actualmente, porque no tienen cargadores, hacen varios tipos de trucos usando enlaces duros para hacerlo funcionar. Pero si tuvieran cargadores, si fuera ESM nativo, entonces podrían haber modificado la fase de resolución para buscar donde quieran. Otro ejemplo son los mapas de importación, anulando especificadores desnudos y esto es lo que intentaremos hacer. Escribamos un cargador que haga esto y entenderás lo que es en un segundo.

Ahora observa que el código de muestra es código de demostración. No lo uses en producción, no tiene manejo de errores, no maneja casos extremos, son solo ejemplos de juguete.

Bien, hablemos de anular módulos. Este es main.js y estamos importando un módulo para sobrescribir. Un módulo para anular no existe en ninguna parte en los módulos de node o en todas partes. Así que si lo ejecuto obtengo el error módulo no encontrado, obviamente. Pero digamos que tengo un archivo overrides.json que dice que un módulo para sobrescribir en realidad existe en .moduleoverride.js y este es moduleoverride.js así que hacemos console log module overridden y queremos que esto funcione. Así que queremos ejecutar el main.js con el cargador. ¿Cómo lo hacemos? Añadimos dash dash loader y apuntamos al cargador y si lo ejecutamos, boom, funciona. Esta es la sintaxis dash dash loader equals o espacio, no importa, y dot slash loader.js nota que el dot slash es importante. Si dices loader.js buscará el paquete loader.js no el archivo loader.js. Bien, así que el dot slash es esencial.

Bien, veamos loader.js no te preocupes, iremos uno por uno y lo entenderemos. Este es el cargador, es muy, muy pequeño como puedes ver escribir un cargador no es tan difícil. Primero tenemos que leer el overrides.json así que lo leemos usando top level 08 y lo analizamos para obtener el overrides.json. Perfecto, fácil, sin problemas. Ahora exportamos una función esa función tiene que llamarse resolve porque cuando NodeJS está cargando un cargador busca esa función que exportó la función y recibirá tres parámetros veremos en un segundo y es async así que puedes hacer lo que quieras allí no estás limitado a la sincronicidad. Así que hablemos de los tres parámetros. Primero el especificador el especificador del módulo es lo que está detrás de las comillas y lo siento dentro de las comillas para en nuestro ejemplo un módulo de anulación tal como aparece en el código.

4. Mejorando la Fase de Carga: HTTP y TypeScript

Short description:

Hablaremos sobre Rex resolve y pasándolo a Node.js. Si el especificador es una anulación, tomamos el especificador de anulaciones y lo pasamos a Node.js. Mejorar la fase de carga implica cargar directamente desde HTTP y cargar el código TypeScript sin construirlo. La carga desde HTTPS utilizando ESM.SH nos proporciona módulos ESM para todos los paquetes NPM. Ejecutar el código sin un cargador resulta en un error de esquema de URL no soportado, pero con un cargador, funciona.

El contexto que veremos más tarde tiene todo tipo de cosas pero principalmente hablaremos sobre Rex resolve si no puedes resolver algo o no quieres resolver y quieres pasarlo a Node.js puedes usar next resolve para resolver. Así que veamos el código. Si el especificador es una anulación recuerda que las anulaciones son el archivo JSON entonces si no está en las anulaciones llamamos a next resolve con un especificador. Así que si no sabemos qué hacer con él lo pasamos a Node.js. Fácil, pero si queremos saber qué hacer con él tomamos el especificador de anulaciones así que tomamos lo que sea que esté en las anulaciones y lo pasamos a Node.js. Ahora Node.js no obtendrá el especificador desnudo como el módulo para anular pero obtendrá .slash module overrides.js pero aún así lo pasamos a Node.js y boom, ahí vamos. Funciona. ¿Ves lo fácil que es escribir un cargador ASM? Realmente es así de simple. Obviamente casos extremos, manejo de errores, blah blah blah pero en esencia, esto es todo. Así que hemos visto la fase de resolución. Hablemos de la fase de carga y cómo anularla.

Así que recuerda que resolver es tomar el especificador y resolverlo a una URL completa y luego leer el archivo es donde estamos hablando de la carga. ¿De acuerdo? ¿Por qué mejorar la fase de carga? Bueno, hay muchos ejemplos. Vamos a hacer dos cosas. Cargando directamente desde HTTP en lugar de desde un archivo y cargando el código TypeScript sin construirlo. Así que podremos darle un archivo TS y simplemente funcionará. Hablemos de la carga desde HTTP. Bueno, este es el código. Así que estamos cargando desde HTTPS, ESM.SH, lo que sea. ESM.SH, y hay otros por ahí, es un servicio que te da módulos ESM de todos los nativos, todos los paquetes NPM que existen. Es realmente, realmente, realmente genial. Bueno, esto es lo que queremos ejecutar. Si lo ejecutamos así sin un cargador, obtendremos el error de esquema de URL no soportado porque Node.js nos está diciendo, No sé qué hacer con HTTPS. Perfecto. Pero si lo ejecutamos con un cargador, boom, funciona. Estamos muy, muy contentos. Veamos el cargador. Primero que nada, al igual que hay una exportación de carga. Tenemos una exportación de, al igual que tenemos una exportación de resolve para la URL de resolución. Oh espera, algo le pasó a la, estoy parando.

5. Cargador y Recuperación de Código Fuente

Short description:

El cargador en la URL del módulo es simple y tiene una función de carga exportada de forma asíncrona. Se encarga de la resolución de las URL y utiliza fetch para recuperar el código fuente. Se siguen las redirecciones y el resultado se devuelve a node.js.

Sí. No, veo lo que es. Es mi, ahí vamos. Vale, era, vale. Entonces, sí. Así que ahí vamos. Este es el cargador. Como puedes ver, es simple. Lo revisaremos uno por uno como antes. Al igual que en el resolutor, el cargador tiene una función de carga que se exporta de forma asíncrona. Al igual que el ejemplo. Como el anterior.

Hablemos de la URL del módulo. La URL es la URL del módulo. Observa que esta es la URL del módulo después de la resolución. Así que los resolutores, todos los resolutores han terminado con ella. Obtenemos la URL absoluta completa. El contexto lo veremos más tarde. Y la siguiente carga, si no puedes cargar algo, puedes usar la siguiente carga para cargarlo. Suele ser el de node.js. Vale. Así que si la URL no es una URL HTTP o HTTPS, simplemente la pasamos a la siguiente carga. Muy, muy fácil. Si lo es, usamos fetch. Fetch es ahora nativo de node.js, al igual que en el navegador. Puedes usarlo sin importar nada desde el nodo V18, creo, o algo así. Así que usamos fetch para recuperar el código fuente. Seguimos las redirecciones porque esm.sh tiene redirecciones y tenemos el código fuente. ¿Qué hacemos con él? Devolvemos el resultado a node.js. El código fuente del módulo está en la fuente.

6. Formato de Módulo y Resolutor

Short description:

Formato del módulo: ESM, common.js, JSON, WASM. HTTPS debe ser módulo y usar cortocircuito. El resolutor de Node.js arroja un error para HTTPS. Se abrió un error y una solicitud de extracción. Necesitamos un resolutor en el cargador HTTP para resolver el problema. Tratar con especificadores relativos, absolutos y de osos.

El formato es el formato del módulo. ¿Es un módulo, lo que significa ESM, common.js, JSON, WASM? En este caso, siempre decimos que si viene de HTTPS, tiene que ser un módulo. Y cortocircuito. El cortocircuito le dice a node.js, mira, no llamamos a la siguiente carga. Sabemos cuál es la fuente. Pero solo para que sepas, no llamamos a la siguiente carga y está bien. Si no añadimos cortocircuito verdadero, node.js fallará y dirá, ¿estás seguro de que no querías llamar a la siguiente carga? Si no lo hiciste, por favor envía cortocircuito verdadero, y luego añades cortocircuito verdadero, y estás bien.

¿Funcionará esto? Veamos. No. Porque esto es, quiero decir, porque el resolutor de node.js arroja un error. Así que no es el cargador el que dice, no sé qué hacer con HTTPS. Es el resolutor el que dice, no sé qué hacer con HTTPS. Esto es realmente irritante, porque ¿por qué debería importarle? ¿Por qué debería decir el resolutor, no sé qué hacer con HTTPS? Tal vez alguien más quiera saber qué hacer con HTTPS. Así que en realidad descubrí esto cuando estaba trabajando en esta masterclass, y abrí un error e implementé una solicitud de extracción. Así que en node 20, si esta solicitud de extracción pasa, no necesitaremos la siguiente fase, la siguiente cosa que soluciona esto, porque el resolutor de node.js, dice, oh, no conozco esta URL, pero está bien. Lo lanzaré en el cargador. Pero todavía tenemos este problema. Así que necesitamos un resolutor en el cargador HTTP que resuelva este problema. Tenemos que anular la resolución, también. Y esto es irritante, pero es lo que es. OK.

Aquí es donde el código se vuelve interesante. Así que por favor, por favor, por favor, presta atención. Especificadores. Recuerda, estos son especificadores. Nuestro resolutor se encontrará con tres tipos de especificadores. Especificadores de URL relativos, especificadores de URL absolutos, y lo que se llaman especificadores de osos. Y tendremos que lidiar con todos ellos, al igual que node.js. Así que los relativos son estos tipos de especificadores.

7. Manejo de Especificadores de Oso en Node.js

Short description:

Los osos son los que están en la parte inferior. Si es un especificador de oso, pásalo a Node.js.

Los osos son los que están en la parte inferior. Y absoluto, sí, teóricamente, alguien puede darnos una URL absoluta. Entonces, especificadores de oso. ¿Qué hacemos? Dejamos que Node.js lo maneje. No sabemos cómo manejar los especificadores de oso. Entonces, si es un especificador de oso, entonces continuamos con el siguiente resolutor. No hay problema allí de las URL de HTTP, por lo que podemos dejar que Node.js lo maneje. Y este es un especificador de oso. Es feo. Tal vez alguien más tenga una mejor manera. Entonces diría, si el especificador comienza con un punto, entonces no es un especificador de oso. De lo contrario, analízalo. Si es una URL, si no es una URL, entonces es un especificador de oso. De lo contrario, es una URL, por lo que no es un especificador de oso. Entonces, si es un especificador de oso, pásalo a Node.js.

8. URLs Relativas y Cargador de TypeScript

Short description:

Para tratar con URLs relativas, añadimos la URL del módulo al especificador y la absolutizamos. Si la URL comienza con HTTP, la devolvemos tal cual. De lo contrario, la pasamos al resolutor de Node.js. Otro cargador es para transpilar TypeScript. Llama a nextload para los archivos .ts, los pasa a Node.js y transforma la fuente usando ESBuild.

Ahora necesitamos tratar con URLs relativas. ¿Cómo absolutizamos una URL relativa? Tomamos la URL del módulo y la añadimos al especificador y la absolutizamos. Así que en este caso, module.js, tenemos la URL absoluta del módulo. Y la absolutizamos para obtener el module.js. Podemos hacerlo con una nueva URL en Node.js, muy fácil. Y esto es lo que hacemos. Tomamos el especificador, tomamos el context.parentURL, que es donde reside la URL padre, y obtenemos una URL al final. Y esto también se encarga de las URLs absolutas.

Ahora, si la URL comienza con HTTP, no queremos enviarla al resolutor de Node.js porque entonces lanzará un error. Así que simplemente devolvemos la URL tal cual y la cortocircuitamos. Y de lo contrario, si no es una URL HTTP, podemos pasarla al resolutor de Node.js. Esto se encarga del problema con HTTP y resolve. Y ahí lo tienen. El cargador funciona.

Hablemos de otro, la transpilación de TypeScript. El cargador anterior añadió soporte para cargar otras fuentes. Este cargador es más bien un transformador. Veamos el código de TypeScript. Este es un main.ts. Importa de otro código de TypeScript pero también importa de código JavaScript, y como pueden ver, código de TypeScript. Y este es el archivo. Nada muy interesante aquí. Ejecutándolo sin un cargador, ¿obtendremos una extensión de archivo desconocida porque no sabe qué hacer con .ts? Perfecto. Ejecutándolo con el cargador funcionará. Veamos cómo funciona un cargador de TypeScript. Si la URL termina en .ts, en primer lugar, llama a nextload. Dice, no sé cómo cargar el archivo. Lo pasaré a node.js. Node.js cargará el archivo y nos devolverá la fuente. Una vez que tenemos la fuente, podemos transformarla usando ESBuild.

9. Encadenamiento de Cargadores para HTTP y TypeScript

Short description:

Puedes usar cualquier transpilador, pero ESBuild es mi elección preferida debido a su simplicidad. Solo requiere unas 10 líneas de código para la transpilación. Hemos visto tres cargadores: uno para sobrescribir módulos, y dos para cargar HTTP y transpilar TypeScript. Estos cargadores se pueden encadenar importando los módulos necesarios y añadiéndolos en el orden deseado. Al especificar las URLs como HTTP en las sobrescrituras, podemos usar especificadores desnudos y lograr una carga y transpilación exitosas.

Puedes usar el transpilador que quieras. Yo uso ESBuild porque es fácil. Obtienes el nuevo código y lo devuelves como este código transpilado con return source y format. Muy, muy fácil, y boom, obtienes transpilación con unas 10 líneas de código. Muy fácil.

Mira ts-node.js. Hace lo mismo, pero de manera robusta puedes ver que tiene cientos de líneas de código. Pero en esencia, está haciendo lo que mostré anteriormente.

OK. Hemos visto tres cargadores. Uno que sobrescribe modules. Hace la fase de resolución. Y dos, la fase de carga, HTTP y transpilación de TypeScript. ¿Podemos encadenar cargadores? ¿Podemos añadirlos uno tras otro? Y la respuesta es absolutamente.

Así que hagamos los cargadores HTTP y TypeScript juntos. Así que importo HTTP, pero uno de ellos es un código de TypeScript. Y quiero que los dos cargadores lo hagan funcionar. Como puedes ver, estamos usando HTTP y estamos usando TypeScript. Y estos son los modules, nada interesante aquí. Pero añadamos la sobrescritura.

OK, así que en lugar de dar la URL completa, solo daremos, ya sabes, especificadores desnudos, A y B, y especificaremos en las sobrescrituras que las URLs son URLs HTTP. Añadimos los cargadores con múltiples. Observa las comas entre ellos. También podemos usar dash-dash loader, HTTP loader, dash-dash loader, TS loader, dash-dash loader, override loader. Lo mismo. Los añadimos juntos y, boom, funciona. Veamos cómo porque esto es interesante. Observa el orden, HTTP loader, TS loader, override loader. En primer lugar, hace la resolución. La resolución obtiene un especificador y devuelve una URL, si recuerdas.

10. Funcionalidad del Cargador y Futuro

Short description:

El cargador HTTP llama al cargador de sobrescritura, que llama al último cargador. El resolutor de sobrescritura lee overrides.json y lo pasa al siguiente cargador. El resolutor HTTP maneja los especificadores HTTP, mientras que el resolutor NodeJS absolutiza todo. Los cargadores mejoran la resolución de URL y la carga de archivos. Pueden cargar desde diferentes fuentes, transformar el código fuente y resolver las URL de manera diferente. Un cargador tiene funciones de resolución y carga. Para usar un cargador, use --loader. El futuro de las mejoras en la carga de módulos es prometedor y fácil de usar.

Así que noten que el cargador HTTP es el primero, pero llamará al cargador de sobrescritura. Llamará al último cargador. ¿Por qué? Porque el resolutor de sobrescritura, perdón, el resolutor de sobrescritura, cuando dice next resolve, llamará al resolutor HTTP. Y cuando el resolutor HTTP llama a next resolve, llamará al resolutor NodeJS. Así que el resolutor de sobrescritura lee el overrides.json y resuelve a través de overrides.json y lo pasa al siguiente cargador. Y este resolutor HTTP, si recuerdan, pasa los especificadores no HTTP a NodeJS y se ocupa de los especificadores HTTP por sí mismo. El resolutor NodeJS absolutizaría todo y lo pasaría, y boom, obtenemos la URL. Los cargadores, lo mismo. Llamará al último cargador, este. Este es el cargador TS que lo pasará al cargador HTTP, que pasa a NodeJS, etc. etc. El cargador HTTP buscará las URL de HTTP y pasará las URL no HTTP, y boom, funciona. Ahora, mi tiempo es corto, así que saltaré esto, pero pueden ver todo en mi presentación. Pero en realidad pueden usar cargadores con APIs, así que especifiquen un cargador que también tenga una API. Es un escenario más avanzado, no se usa mucho, pero pueden hacerlo. Bueno, resumamos. Resumamos. Los cargadores mejoran estas dos fases, no la fase de ejecución, sino la resolución de la URL, que es encontrar dónde está el módulo, y leer la URL, o lo que llamamos cargar el archivo. Bueno, los cargadores pueden ser utilizados para cargar desde diferentes fuentes, transformar el código fuente, transformar las URL resueltas, y resolver las URL de manera diferente. Muchos usos para eso. Un cargador siempre tiene al menos, bueno, no al menos. Como máximo, dos funciones de exportación, resolver y cargar. Puede tener sólo una de ellas. Una se ocupa de la resolución, que toma un especificador y lo resuelve a una URL. Puede usar el siguiente resolver en la cadena si no sabe qué hacer con algo. Y la carga toma la URL, la URL resuelta, y devuelve el código fuente, y si quiere, puede usar la siguiente carga para cargarlo. Para usar un cargador, use dash dash loader. Pueden encadenarlos, lo cual es genial, y para conmutar bien, eso es algo que pasamos. Pueden comunicarse con el cargador utilizando varios métodos. Y el futuro es brillante. Finalmente tenemos una forma formal de hacer mejoras en la carga de módulos. Ha resistido la prueba del tiempo. Todavía es experimental, por lo que aún pueden ocurrir pequeños cambios. Tengan cuidado. Es muy simple de usar, y puede ser utilizado en una gran variedad de casos de uso. Muchas gracias.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Es una jungla ahí fuera: ¿Qué está pasando realmente dentro de tu carpeta Node_Modules?
Node Congress 2022Node Congress 2022
26 min
Es una jungla ahí fuera: ¿Qué está pasando realmente dentro de tu carpeta Node_Modules?
Top Content
The talk discusses the importance of supply chain security in the open source ecosystem, highlighting the risks of relying on open source code without proper code review. It explores the trend of supply chain attacks and the need for a new approach to detect and block malicious dependencies. The talk also introduces Socket, a tool that assesses the security of packages and provides automation and analysis to protect against malware and supply chain attacks. It emphasizes the need to prioritize security in software development and offers insights into potential solutions such as realms and Deno's command line flags.
Hacia una Biblioteca Estándar para Runtimes de JavaScript
Node Congress 2022Node Congress 2022
34 min
Hacia una Biblioteca Estándar para Runtimes de JavaScript
Top Content
There is a need for a standard library of APIs for JavaScript runtimes, as there are currently multiple ways to perform fundamental tasks like base64 encoding. JavaScript runtimes have historically lacked a standard library, causing friction and difficulty for developers. The idea of a small core has both benefits and drawbacks, with some runtimes abusing it to limit innovation. There is a misalignment between Node and web browsers in terms of functionality and API standards. The proposal is to involve browser developers in conversations about API standardization and to create a common standard library for JavaScript runtimes.
Diagnostics de Node.js listos para usar
Node Congress 2022Node Congress 2022
34 min
Diagnostics de Node.js listos para usar
This talk covers various techniques for getting diagnostics information out of Node.js, including debugging with environment variables, handling warnings and deprecations, tracing uncaught exceptions and process exit, using the v8 inspector and dev tools, and generating diagnostic reports. The speaker also mentions areas for improvement in Node.js diagnostics and provides resources for learning and contributing. Additionally, the responsibilities of the Technical Steering Committee in the TS community are discussed.
Compatibilidad con Node.js en Deno
Node Congress 2022Node Congress 2022
34 min
Compatibilidad con Node.js en Deno
Deno aims to provide Node.js compatibility to make migration smoother and easier. While Deno can run apps and libraries offered for Node.js, not all are supported yet. There are trade-offs to consider, such as incompatible APIs and a less ideal developer experience. Deno is working on improving compatibility and the transition process. Efforts include porting Node.js modules, exploring a superset approach, and transparent package installation from npm.
El Estado de Node.js 2025
JSNation 2025JSNation 2025
30 min
El Estado de Node.js 2025
The speaker covers a wide range of topics related to Node.js, including its resilience, popularity, and significance in the tech ecosystem. They discuss Node.js version support, organization activity, development updates, enhancements, and security updates. Node.js relies heavily on volunteers for governance and contribution. The speaker introduces an application server for Node.js enabling PHP integration. Insights are shared on Node.js downloads, infrastructure challenges, software maintenance, and the importance of update schedules for security.
Registro Multihilo con Pino
JSNation Live 2021JSNation Live 2021
19 min
Registro Multihilo con Pino
Top Content
Today's Talk is about logging with Pino, one of the fastest loggers for Node.js. Pino's speed and performance are achieved by avoiding expensive logging and optimizing event loop processing. It offers advanced features like async mode and distributed logging. The use of Worker Threads and Threadstream allows for efficient data processing. Pino.Transport enables log processing in a worker thread with various options for log destinations. The Talk concludes with a demonstration of logging output and an invitation to reach out for job opportunities.

Workshops on related topic

Masterclass de Node.js
Node Congress 2023Node Congress 2023
109 min
Masterclass de Node.js
Top Content
Workshop
Matteo Collina
Matteo Collina
¿Alguna vez has tenido dificultades para diseñar y estructurar tus aplicaciones Node.js? Construir aplicaciones que estén bien organizadas, sean probables y extensibles no siempre es fácil. A menudo puede resultar ser mucho más complicado de lo que esperas. En este evento en vivo, Matteo te mostrará cómo construye aplicaciones Node.js desde cero. Aprenderás cómo aborda el diseño de aplicaciones y las filosofías que aplica para crear aplicaciones modulares, mantenibles y efectivas.

Nivel: intermedio
Construir y Desplegar un Backend Con Fastify & Platformatic
JSNation 2023JSNation 2023
104 min
Construir y Desplegar un Backend Con Fastify & Platformatic
Top Content
WorkshopFree
Matteo Collina
Matteo Collina
Platformatic te permite desarrollar rápidamente GraphQL y REST APIs con un esfuerzo mínimo. La mejor parte es que también te permite desatar todo el potencial de Node.js y Fastify siempre que lo necesites. Puedes personalizar completamente una aplicación de Platformatic escribiendo tus propias características y plugins adicionales. En la masterclass, cubriremos tanto nuestros módulos de Open Source como nuestra oferta en la Nube:- Platformatic OSS (open-source software) — Herramientas y bibliotecas para construir rápidamente aplicaciones robustas con Node.js (https://oss.platformatic.dev/).- Platformatic Cloud (actualmente en beta) — Nuestra plataforma de alojamiento que incluye características como aplicaciones de vista previa, métricas integradas e integración con tu flujo de Git (https://platformatic.dev/). 
En esta masterclass aprenderás cómo desarrollar APIs con Fastify y desplegarlas en la Platformatic Cloud.
Construyendo un Servidor Web Hiper Rápido con Deno
JSNation Live 2021JSNation Live 2021
156 min
Construyendo un Servidor Web Hiper Rápido con Deno
Workshop
Matt Landers
Will Johnston
2 authors
Deno 1.9 introdujo una nueva API de servidor web que aprovecha Hyper, una implementación rápida y correcta de HTTP para Rust. El uso de esta API en lugar de la implementación std/http aumenta el rendimiento y proporciona soporte para HTTP2. En este masterclass, aprende cómo crear un servidor web utilizando Hyper en el fondo y mejorar el rendimiento de tus aplicaciones web.
0 a Auth en una Hora Usando NodeJS SDK
Node Congress 2023Node Congress 2023
63 min
0 a Auth en una Hora Usando NodeJS SDK
WorkshopFree
Asaf Shen
Asaf Shen
La autenticación sin contraseña puede parecer compleja, pero es fácil de agregar a cualquier aplicación utilizando la herramienta adecuada.
Mejoraremos una aplicación JS de pila completa (backend de Node.JS + frontend de React) para autenticar usuarios con OAuth (inicio de sesión social) y contraseñas de un solo uso (correo electrónico), incluyendo:- Autenticación de usuario - Administrar interacciones de usuario, devolver JWT de sesión / actualización- Gestión y validación de sesiones - Almacenar la sesión para solicitudes de cliente posteriores, validar / actualizar sesiones
Al final del masterclass, también tocaremos otro enfoque para la autenticación de código utilizando Flujos Descope en el frontend (flujos de arrastrar y soltar), manteniendo solo la validación de sesión en el backend. Con esto, también mostraremos lo fácil que es habilitar la biometría y otros métodos de autenticación sin contraseña.
Tabla de contenidos- Una breve introducción a los conceptos básicos de autenticación- Codificación- Por qué importa la autenticación sin contraseña
Requisitos previos- IDE de tu elección- Node 18 o superior
GraphQL: De Cero a Héroe en 3 horas
React Summit 2022React Summit 2022
164 min
GraphQL: De Cero a Héroe en 3 horas
Workshop
Pawel Sawicki
Pawel Sawicki
Cómo construir una aplicación GraphQL fullstack (Postgres + NestJs + React) en el menor tiempo posible.
Todos los comienzos son difíciles. Incluso más difícil que elegir la tecnología es desarrollar una arquitectura adecuada. Especialmente cuando se trata de GraphQL.
En este masterclass, obtendrás una variedad de mejores prácticas que normalmente tendrías que trabajar en varios proyectos, todo en solo tres horas.
Siempre has querido participar en un hackathon para poner algo en funcionamiento en el menor tiempo posible, entonces participa activamente en este masterclass y únete a los procesos de pensamiento del instructor.
Dominando Node.js Test Runner
TestJS Summit 2023TestJS Summit 2023
78 min
Dominando Node.js Test Runner
Workshop
Marco Ippolito
Marco Ippolito
Node.js test runner es moderno, rápido y no requiere bibliotecas adicionales, pero entenderlo y usarlo bien puede ser complicado. Aprenderás a utilizar Node.js test runner a su máximo potencial. Te mostraremos cómo se compara con otras herramientas, cómo configurarlo y cómo ejecutar tus pruebas de manera efectiva. Durante la masterclass, haremos ejercicios para ayudarte a sentirte cómodo con el filtrado, el uso de afirmaciones nativas, la ejecución de pruebas en paralelo, el uso de CLI y más. También hablaremos sobre trabajar con TypeScript, hacer informes personalizados y la cobertura de código.