La vida de un ESM en Node.js – y cómo está cambiando para mejor

This ad is not shown to multipass and full ticket holders
React Summit US
React Summit US 2026
November 17 - 20, 2026
New York, US & Online
Upcoming event
React Summit US 2026
React Summit US 2026
November 17 - 20, 2026. New York, US & Online
Bookmark
Rate this content
Sentry
Promoted
Code breaks, fix it faster

Crashes, slowdowns, regressions in prod. Seer by Sentry unifies traces, replays, errors, profiles to find root causes fast.

Get started

El ecosistema de JavaScript se está moviendo hacia un sistema de módulos estandarizado, y Node.js está evolucionando para ayudar en su adopción. ¿Qué sucede realmente cuando Node.js carga un módulo ES hoy en día? Esta charla recorre todo el proceso: resolución, carga, análisis, compilación, vinculación, instanciación y evaluación. Cubriremos cómo se divide el trabajo entre V8 y Node.js, dónde Node.js difiere de los navegadores y empaquetadores, y los cambios recientes en Node.js que desbloquean nuevos patrones para una mejor interoperabilidad, rendimiento y personalización en ESM. Saldrás con un modelo mental más claro de cómo se carga ESM en Node.js, despojado de conocimientos obsoletos y conceptos erróneos, entenderás dónde buscar cuando tus módulos no funcionen, y aprenderás sobre las nuevas capacidades que te ayudarán a escribir, ejecutar y compartir mejor el código ESM en Node.js hoy.

This talk has been presented at Web Engineering Summit 2026, check out the latest edition of this Tech Conference.

Joyee Cheung
Joyee Cheung
29 min
11 Jun, 2026

Comments

Sign in or register to post your comment.
Video Summary and Transcription
La charla cubre la vida de un ESM en Node, resolución de importaciones, mejoras en la carga de módulos, desafíos de transpilación de TypeScript, personalización de la resolución de módulos y carga de fuentes, manejo de la compilación y dependencias, personalización de ESM, limitaciones de ESM, dependencias circulares y optimización del rendimiento de carga en Node.

1. Understanding ESM in Node

Short description:

Habla sobre la vida de un ESM en Node cubriendo la carga de módulos, empaquetadores, navegadores y malentendidos comunes. Auto-presentación, trabajo en Gallia, patrocinado por Bloomberg, Node.tsc & V8 committer, mejoras en la carga de módulos de Node. Rápido cuestionario sobre fallos de carga de módulos cuando se cargan juntos. Módulo que no existe en disco golpea primero debido a la fase de resolución.

Hola, gracias por invitarme hoy. Hoy esta charla trata sobre la vida de un ESM en Node. Así que esta es una charla sobre fundamentos, y una de las cosas más fundamentales en JavaScript son los módulos. Hoy cubriremos qué sucede cuando Node solicita importar un módulo, cómo las diferentes etapas de carga de módulos difieren en los empaquetadores de Node y navegadores, y nuevas características de transpiler o lenguaje de Node que están cambiando estas etapas. También cubriremos algunos malentendidos comunes sobre cómo funciona ESM. Será más útil si trabajas en un framework o herramientas de JavaScript o si deseas maximizar el rendimiento de carga de tus módulos o simplemente cuando necesites depurar algunos errores misteriosos cuando cargas el módulo. Incluso si estás usando IA en estos días, los fundamentos aún pueden ser importantes porque, bueno, la IA puede estar entrenada con datos desactualizados en internet y pueden estar confundidos sobre el estado más reciente de las cosas a menos que lo aclares para ellos.

Así que una rápida auto-presentación. Soy Joy Yi. Trabajo en Gallia y he sido patrocinada por Bloomberg en muchos de mis trabajos de código abierto. Como se mencionó antes, soy miembro de Node.tsc y committer de V8. Recientemente he estado contribuyendo a varias mejoras en la carga de módulos en Node. Puedes encontrarme en GitHub usando este handle y también puedes encontrar las diapositivas de esta charla en mi repositorio de charlas y el código QR aquí.

Así que antes de comenzar, hagamos un rápido cuestionario. Supongamos que tenemos este punto de entrada ESM que tiene estas cuatro declaraciones de importación. Individualmente, todas pueden fallar en la carga del módulo, pero cuando se cargan juntas, ¿cuál golpeará primero? Así que la opción A es cargar un módulo que lanza un error de JavaScript en el nivel superior. B es un módulo que no tiene una exportación nombrada que este módulo está importando. C es un módulo que no existe en disco. Y D es un módulo que contiene un error de sintaxis. ¿Cuál crees que veremos primero si intentamos cargar este módulo? Para ahorrar algo de tiempo, saltemos a la respuesta correcta por ahora. Es la opción C, el módulo que no existe en disco que golpeará primero. Volveremos a esta diapositiva más tarde después de explicar las diferentes fases por las que pasa un ESM en Node, entonces quedará claro por qué este es el que golpea primero.

2. Understanding Import Resolution in Node

Short description:

Discute la resolución de importaciones en Node para paquetes y rutas, diferencias en la resolución en Node, límites de empaquetado de código y faux ESM. Node resuelve especificadores en URLs, explora módulos de Node y package.json, a diferencia de los navegadores. Los límites imitan la resolución de Node pero exploran directorios y extensiones para rutas. Faux ESM en límites imita la exploración de common.js.

Así que comencemos con una declaración de importación como esta. Para un poco de complejidad, hablemos de importar un paquete en lugar de solo una ruta. Entonces, ¿qué hará Node cuando ejecutemos el archivo que importa una exportación nombrada, llamada add aquí, de un especificador que es un paquete? Lo primero que va a hacer es la resolución. Así que este es un proceso de resolver el paquete especificador en una URL que identifica un archivo real en disco. Esto es manejado por el embebedor del motor de JavaScript, en este caso Node.

Así que si el módulo puede ser resuelto, por ejemplo si no existe en disco, Node falla con error. Es por eso que vemos que en el fragmento anterior, importar un archivo inexistente fallará primero porque la resolución es el primer paso. Hay varias diferencias en cómo funciona la resolución en diferentes entornos. En Node, si el especificador no es una ruta, busca en la carpeta de módulos de Node recursivamente. También intenta mirar en package.json. Si hay uno, consulta las condiciones de importación o exportación en el package.json. Si el especificador es una ruta, debe ser una ruta exacta porque cuando Node carga ESM a diferencia de common.js, no explora el index.js, por ejemplo en directorios, tampoco explora la extensión .

js si el especificador no deja una extensión. Así que todo esto llevará a errores de resolución para ESM en Node.

QnA

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

Aplicaciones React (+Native) full-stack y seguras con tRPC.io
React Advanced 2021React Advanced 2021
6 min
Aplicaciones React (+Native) full-stack y seguras con tRPC.io
Top Content
Alex introduces tRPC, a toolkit for making end-to-end type-safe APIs easily, with auto-completion of API endpoints and inferred data from backend to frontend. tRPC works the same way in React Native and can be adopted incrementally. The example showcases backend communication with a database using queries and validators, with types inferred to the frontend and data retrieval done using Prisma ORM.
TypeScript y la Base de Datos: ¿Quién Posee los Tipos?
TypeScript Congress 2022TypeScript Congress 2022
27 min
TypeScript y la Base de Datos: ¿Quién Posee los Tipos?
Top Content
The Talk discusses the use of TypeScript and SQL together in software development. It explores different approaches, such as using an ORM like TypeORM or a schema generator like pg2ts. Query builders like connects JS and tools like PGTyped are also discussed. The benefits and trade-offs of using TypeScript and SQL are highlighted, emphasizing the importance of finding a middle ground approach.
APIs están Evolucionando. Otra vez.
JSNation 2023JSNation 2023
28 min
APIs están Evolucionando. Otra vez.
Top Content
Matteo Collina
Luca Maraschi
2 authors
Technology is a spiral, with foundational ideas resurfacing. Java revolutionized enterprise applications. REST and JSON simplified building APIs and websites. Node.js enabled fast and custom development, leading to the microservices revolution. Platformatic aims to fill the gap in building, managing, and scaling microservices painlessly.
Manejo de datos a gran escala para desarrolladores de React
React Summit 2022React Summit 2022
23 min
Manejo de datos a gran escala para desarrolladores de React
This Talk discusses handling data at scale for React developers, including scaling databases and the need for search. It explores different ways to fetch data in React, such as using useEffect, fetch, and setState. The Talk also introduces Suspense for data fetching and how it improves user experience. It covers controlling React Suspense, handling search, and using render-as-you-fetch. The Talk concludes with a discussion on the RFC status and fetching in event handlers.
Descubriendo NodeJS y Kafka: Un Cuento de Transmisión de Eventos
JSNation 2022JSNation 2022
8 min
Descubriendo NodeJS y Kafka: Un Cuento de Transmisión de Eventos
This lightning talk introduces distributed computing and discusses the challenges, patterns, and solutions related to using Kafka for event sharing. It emphasizes the importance of separating services and using strong typing to avoid broken messages. The talk also covers Kafka's transaction configuration and guarantees, highlighting the need for proper configuration and the use of transaction IDs. Overall, it provides valuable insights into scaling companies, big data, and streaming platforms.
Monitorización de errores y ralentizaciones con un frontend de JS y un backend de Node
Node Congress 2022Node Congress 2022
8 min
Monitorización de errores y ralentizaciones con un frontend de JS y un backend de Node
Sentry is code monitoring for developers, specifically designed for the application layer. It helps identify error details, frequency, release, user information, and stack trace. Source maps can be uploaded to see the original source code and suspect commits can be identified. Performance monitoring helps identify slowdowns and determine the cause. Automating alerts and investigating errors helps gain instant context and trace errors across different projects.

Workshops on related topic

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
Top Content
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.
Advanced TypeScript for Bun and Node.js
JSNation US 2024JSNation US 2024
103 min
Advanced TypeScript for Bun and Node.js
Workshop
Adrian Hajdin
Adrian Hajdin
Aprende el potencial completo de TypeScript utilizando características avanzadas como Type Inference, Type Guards, Generics, Transformers y Utility Types con programación asíncrona tanto en Node.js (usando Express.js) como en Bun.js (usando Hono.js), todo mientras entiendes las mejores prácticas para construir APIs fuertemente tipadas con diferentes bases de datos.Visión GeneralEn esta masterclass, comenzaremos con una discusión sobre las actualizaciones recientes en Node.js y Bun.js, centrándonos en su soporte incorporado para TypeScript. Aprenderás cómo configurar TypeScript en ambos entornos de ejecución y crear APIs estrictamente tipadas usando Express.js y Hono.js. A través de demostraciones prácticas, exploraremos la integración con varias bases de datos como MongoDB y Postgres, aprovechando las características avanzadas de TypeScript para construir aplicaciones robustas. Al final de la masterclass, estarás equipado con el conocimiento para optimizar el código TypeScript para el rendimiento y los patrones de diseño, asegurando que tus APIs sean tanto eficientes como mantenibles.Objetivos de Aprendizaje- Introducción al soporte de TypeScript en Node.js y Bun.js- Características Avanzadas de TypeScript: Generics, Type Guards, Mapped Types, etc.- Middleware e Inyección de Dependencias con Express.js y Hono.js- Mejora de Patrones de Diseño y Rendimiento en TypeScript- Pruebas Unitarias e Integración con TypeScript- Integración de Bases de Datos: MongoDB, Postgres, Prisma y otros- Mejores Prácticas para el Desarrollo de APIs Robustas tanto en Node.js como en Bun.js
Flujos de base de datos y desarrollo de API con Prisma
Node Congress 2022Node Congress 2022
98 min
Flujos de base de datos y desarrollo de API con Prisma
Workshop
Nikolas Burk
Nikolas Burk
Prisma es un ORM de código abierto para Node.js y TypeScript. En esta masterclass, aprenderás los flujos de trabajo fundamentales de Prisma para modelar datos, realizar migraciones de base de datos y consultar la base de datos para leer y escribir datos. También aprenderás cómo Prisma se integra en tu stack de aplicaciones, construyendo una API REST y una API GraphQL desde cero utilizando SQLite como base de datos.
Tabla de contenidos:
- Configuración de Prisma, modelado de datos y migraciones- Explorando Prisma Client para consultar la base de datos- Construyendo rutas de API REST con Express- Construyendo una API GraphQL con Apollo Server
Construyendo un backend serverless nativo de GraphQL con Fauna
GraphQL Galaxy 2021GraphQL Galaxy 2021
143 min
Construyendo un backend serverless nativo de GraphQL con Fauna
Workshop
Rob Sutter
Shadid Haque
2 authors
¡Bienvenido a Fauna! Este masterclass ayuda a los desarrolladores de GraphQL a construir aplicaciones de alto rendimiento con Fauna que se escalan a cualquier tamaño de base de usuarios. Comienzas con lo básico, utilizando solo el playground de GraphQL en el panel de Fauna, luego construyes una aplicación completa de pila completa con Next.js, agregando funcionalidad a medida que avanzas.

En la primera sección, Comenzando con Fauna, aprendes cómo Fauna crea automáticamente consultas, mutaciones y otros recursos basados en tu esquema de GraphQL. Aprendes cómo realizar tareas comunes con GraphQL, cómo usar el lenguaje de consulta de Fauna (FQL) para realizar tareas más avanzadas.

En la segunda sección, Construyendo con Fauna, aprendes cómo Fauna crea automáticamente consultas, mutaciones y otros recursos basados en tu esquema de GraphQL. Aprendes cómo realizar tareas comunes con GraphQL, cómo usar el lenguaje de consulta de Fauna (FQL) para realizar tareas más avanzadas.
Construyendo APIs GraphQL con la biblioteca Neo4j GraphQL
GraphQL Galaxy 2021GraphQL Galaxy 2021
175 min
Construyendo APIs GraphQL con la biblioteca Neo4j GraphQL
Workshop
William Lyon
William Lyon
Este masterclass explorará cómo construir APIs GraphQL respaldadas por Neo4j, una base de datos de grafos nativa. La biblioteca Neo4j GraphQL permite a los desarrolladores diseñar e implementar rápidamente APIs GraphQL completamente funcionales sin escribir ningún resolvedor. Este masterclass mostrará cómo utilizar la biblioteca Neo4j GraphQL para construir una API GraphQL en Node.js, incluyendo la adición de lógica personalizada y reglas de autorización.

Tabla de contenidos:
- Visión general de GraphQL y construcción de APIs GraphQL
- Construcción de APIs GraphQL en Node.js respaldadas por una base de datos de grafos nativa utilizando la biblioteca Neo4j GraphQL
- Adición de lógica personalizada a nuestra API GraphQL utilizando la directiva de esquema @cypher y resolvedores personalizados
- Adición de reglas de autenticación y autorización a nuestra API GraphQL