anuncios

Express@5.1.0: Ahora el Predeterminado en npm con Cronograma LTS

Comité Técnico de Express
Comité Técnico de Express March 31, 2025

Express v5.0.0 fue liberado el 9 de septiembre del año pasado, pero no lo hicimos la versión latest en npm. Muchos nos preguntaron por qué y cuándo sería, y francamente no estábamos listos en ese momento para dar ese salto. Si no has seguido las noticias del proyecto este último año, hemos estado trabajando duro para revivir el proyecto y cuando lanzamos la versión inicial de v5 había muchos cabos sueltos. Así que primero repasemos rápidamente algunos de esos cabos sueltos.

Actualizaciones de documentación

No habíamos actualizado la documentación, proporcionado guías de migración, o incluso revisado completamente algunos de los docs estancados de v4/5 en mucho tiempo. Desde entonces hemos tenido muchísimos colaboradores geniales que han ayudado a mejorar las cosas. Como con cualquier proyecto de Open Source basado en voluntarios, nos encantan las contribuciones que nos ayudan a mejorar, así que al actualizar por favor sigue abriendo PRs para arreglar cualquier cosa que nos hayamos perdido.

Puedes encontrar nuestra documentación de v5 y nuestra guía de migración en el sitio web.

Soporte de Migración

Sabemos que migrar entre versiones puede ser un desafío, especialmente cuando implica cambios significativos en un framework ampliamente usado como Express. Por eso hemos trabajado en una solución para simplificar parte del proceso y reducir el impacto en los desarrolladores.

Gracias a los increíbles esfuerzos de Sebastian y Filip, hemos desarrollado un nuevo paquete codemod específicamente diseñado para facilitar la transición de Express v4 a v5, así como futuras versiones principales. Este paquete automatiza muchos de los cambios de código necesarios, minimizando el esfuerzo manual y haciendo la actualización lo más fluida y eficiente posible.

Sin embargo, entendemos que no todos los cambios pueden ser automatizados. Algunos cambios disruptivos, como la nueva sintaxis de coincidencia de rutas, requieren modificaciones manuales por parte de los desarrolladores. Puedes leer más sobre todos los cambios disruptivos que vinieron con v5 en nuestro anuncio original de la versión.

Para más detalles sobre el proceso de migración y cómo usar el paquete codemod, revisa el README del repositorio y la guía de migración.

Compatibilidad del ecosistema

El ecosistema de Express es uno de sus mayores activos. Se remonta a los primeros días de Node.js y es la columna vertebral que mantiene a express popular. Cuando pasas 10 años sin una versión principal todo, desde middleware hasta documentación, necesitaba actualizaciones. Queríamos asegurar que la gente tuviera algo de tiempo para actualizar todo eso antes de que todos se mudaran. Particularmente nos importa nuestra muy grande base de usuarios principiantes que puede que no sepa que la publicación del blog que están leyendo no es compatible con lo que obtienen de npm i express.

Reconocemos que algo de fricción es inevitable durante actualizaciones principales, pero gracias al trabajo de socios del ecosistema como Kamil de NestJS trabajando para actualizar express antes de que pasáramos a latest esperamos estar por delante de la curva. Y como dije arriba, siempre agradecemos la ayuda para hacer esta transición más fácil para los que vienen después de ti, los PRs son el mejor apoyo que puedes dar.

Soporte a Largo Plazo

Habíamos estado discutiendo cómo soportar v4 ahora que v5 estaba fuera, pero no habíamos definido una directriz clara o expectativa, y no teníamos (y aún no tenemos) documentación para usuarios finales sobre nuestros planes aquí. Aunque todavía tenemos progreso que hacer aquí, tenemos una estrategia LTS propuesta que será la base para nuestra próxima documentación. Las opiniones son muy bienvenidas para que podamos asegurar que esté claramente comunicada y aceptable para la comunidad.

Además desde entonces hemos anunciado una asociación con HeroDevs para ayudar a empresas que tienen menos capacidad de actualizar. Más información sobre cómo funcionará cuando v4 llegue a EOL vendrá cuando nos acerquemos a ese momento.


Fases de Soporte y Pasar a latest

¿Qué significa “pasar a latest”? Si no estás familiarizado con cómo funcionan los dist-tags de npm, la etiqueta latest es lo que los usuarios obtienen cuando ejecutan npm install express. Esto es importante porque significa que es la “versión instalada por defecto” y activará la transición de casi 17 millones de descargas semanales de nuestro actual latest v4.21.2 a v5. Al comenzar esta transición queremos que los usuarios, empresas y otras organizaciones sepan exactamente qué significa para el soporte. Para ayudar con esto hemos desarrollado una estrategia LTS que define nuestras 3 fases de soporte y establece fechas objetivo para cuándo v4 entrará en EOL.

Las versiones principales de Express pasarán por tres fases soportadas:

  • CURRENT: Una nueva versión principal es designada como CURRENT al ser liberada. Está disponible pero no es la versión latest en npm por un mínimo de 3 meses.
  • ACTIVE: Después del período mínimo de 3 meses y cuando el TC acuerda que es estable y segura, la versión ACTIVE se etiqueta como latest en npm por un mínimo de 12 meses.
  • MAINTENANCE: Cuando una nueva versión principal se vuelve ACTIVE, la versión principal anterior entra en MAINTENANCE por 12 meses.

CURRENT

  • Las nuevas versiones principales pasarán por un corto período de endurecimiento para asegurar estabilidad, seguridad y compatibilidad con librerías/recursos del ecosistema.
  • Nos esforzaremos por asegurar que no se incluyan cambios disruptivos, pero nos reservamos el derecho de hacer correcciones de seguridad o de alta prioridad de naturaleza disruptiva dentro de este período.
  • Las líneas CURRENT recibirán todo tipo de trabajo activo incluyendo: correcciones de bugs, parches de seguridad, nuevas características y avisos de deprecación.
  • Se recomienda a los usuarios usar líneas CURRENT y actualizar tan rápido como su perfil de riesgo lo permita

ACTIVE

  • Las líneas ACTIVE recibirán todo tipo de trabajo activo incluyendo: correcciones de bugs, parches de seguridad, nuevas características y avisos de deprecación.
  • Para los usuarios, las líneas ACTIVE son consideradas la versión más estable y mejor soportada en cualquier momento dado.

MAINTENANCE

  • Las líneas MAINTENANCE solo recibirán parches de seguridad o correcciones de bugs de alta prioridad.
  • Se recomienda encarecidamente a los usuarios actualizar a una versión CURRENT o ACTIVE.

Cronograma Propuesto

Para las líneas de versiones existentes, estableceremos las siguientes fechas de fases:

PrincipalCURRENTACTIVEMAINTENANCEEOL
4.x2025-04-01*no sooner than 2026-10-01
5.x2024-09-112025-03-31**no sooner than 2026-04-01**no sooner than 2027-04-01
6.x***no sooner than 2026-01-01

Como puedes ver, esto significa que v5.1.0 siendo etiquetado como latest indica que pasamos de CURRENT a ACTIVE lo cual inicia el reloj de EOL para v4 al moverlo a MAINTENANCE. Reconocemos que v4 es un caso especial habiendo sido la única versión principal durante la mayor parte de la historia de Node.js mismo. Por esto, queremos permanecer flexibles y también proporcionar un poco más de soporte. Queremos hacer lo que es mejor para el ecosistema, así que considera estas metas no compromisos.

*: v4 es un caso especial, y podemos extender el soporte de MAINTENANCE **: Las fechas de MAINTENANCE y EOL de v5 están determinadas por cuándo se libere v6, estas fechas reflejan las fechas más tempranas si liberáramos v6 el 2025-10-01 *** : El trabajo de v6 no ha comenzado oficialmente aún, esta es simplemente la fecha más temprana en que podemos liberar basándonos en nuestra política propuesta


Finalmente, qué cambió en v5.1.0

Esta versión se enfocó principalmente en deuda técnica por soportar tantas versiones antiguas de Node.js y otras cosas que estaban estancadas pero no se habían integrado antes de que saliera v5.0.0.

Cambios Principales de Express 5.1.0

  • Añadido soporte para Uint8Array en res.send()
  • Transicionadas todas las dependencias restantes para usar rangos ^ en lugar de versiones fijas
  • Añadir campo funding en package.json para destacar nuestro OpenCollective
  • Añadido soporte para opción ETag en res.sendFile()
  • Añadido soporte para añadir múltiples enlaces con el mismo rel con res.links()
  • Rendimiento: Usar loop para acceptParams
  • Ver Changelog v5.1.0

Dependencias actualizadas

También invertimos tiempo en preparar varias versiones en los paquetes de los que Express depende. La mayoría de estos paquetes son usados por otras librerías y frameworks como librerías individuales.

  • body-parser@2.2.0
    • Eliminar verificaciones de soporte legacy de node.js para Brotli y AsyncLocalStorage
    • Eliminar unpipe y destroy
  • router@2.2.0
    • Restaurar debug. Ahora con el scope de router en lugar de express.
    • Eliminar verificaciones de soporte legacy de node.js para setImmediate
    • Deprecar soporte de promise no nativo
    • Eliminar after, safe-buffer, array-flatten, setprototypeof, methods, utils-merge
  • finalhandler@2.1.0
    • Eliminar verificaciones de soporte legacy de node.js para headersSent, setImmediate, y soporte http2
    • Eliminar unpipe
  • serve-static@2.2.0

Gracias y Qué Viene

Muchas gracias a todos los involucrados en Express durante el último año, el trabajo que todos nuestros colaboradores han puesto es increíble, y no podríamos hacerlo sin ellos. Si no puedes ser un colaborador tú mismo, por favor considera pedir a tu empresa que apoye el proyecto financieramente en OpenCollective.

Al mirar hacia adelante, estamos emocionados de seguir construyendo impulso. Si aún no lo has leído, nuestra publicación del blog Rewind 2024 + Visión 2025 describe dónde hemos estado y hacia dónde vamos. Esto incluye rendimiento, paquetes con scope, mejor automatización, endurecimiento de seguridad, y más.

Una iniciativa importante es nuestro nuevo Grupo de Trabajo de Rendimiento, enfocado en identificar y corregir cuellos de botella de larga data en Express. Estamos agradecidos de arrancar esto con el apoyo del Sovereign Tech Fund (STF), que nos está ayudando a invertir en la sostenibilidad y rendimiento a largo plazo de la infraestructura principal. Además, trabajaremos para mejorar nuestra DX de TypeScript y daremos los próximos pasos para mejorar el sitio web.

Y sí, las discusiones de v6 ya están empezando a calentarse. Mantente atento a las actualizaciones, y como siempre, ¡nos vemos en los issues!

Un enorme agradecimiento a @wesleytodd, @blakeembrey, @bjohansebas, @UlisesGascon, @Phillip9587, @carpasse, @jonchurch, @ctcpip, @inigomarquinez, @carlosstenzel, @crandmck, @chrisdel101, @dpopp07, @Ayoub-Mabrouk, @jonkoops, @IamLizu, @marco-ippolito, @ipreencekmr, @ShubhamOulkar, @raksbisht, @jeffreybaird, @dougwilson, @mertcanaltin, @GeorgeShvab, @RobinTail, @EvanHahn, @rhodgkins, @cengizcmataraci, @Shantanugupta43, @italojs, @ljharb, @MaoShizhong, @aroyan, @Binilkks, @danielgindi, @papandreou, @jsoref, @bigbigDreamer, @broofa, @CommanderRoot, @andvea, @juanarbol, @agungjati, @alexandercerutti, @pr4j3sh, @hamirmahal, @slagiewka, @Abdel-Monaam-Aouini, @sazk07, @bhavya3024, @joshbuker, @almic, @FDrag0n, @Dmitry-Kondar, @attrid, @kristof-low, @gireeshpunathil, @UzairJ99, @choi2021, @hayden36, @joharkhan99, @peterh-capella, @johnburnett, @nicolasgandrade, @axhuwastaken, @abhijeetpandit7, @peterdanwan, @rehmansheikh222, @corydalis10, @mgsantos177, @wilyJ80, @LuiGeeDev, @juliogarciape, @aelmardhi, @Ahmed1monm, @erensarac, @tomasz13nocon, @tianbuyung, @GreyTearsDev, @aastha-cse, @krzysdz, @Miguelrom, @bnoordhuis, @MehfoozurRehman, @EasonLin0716, @grjan7, @mishrasur7, @gregfenton, @zareefhasan, @Tejas150, @jpricardo, @nikeee, @dotnetCarpenter, @engpetermwangi, @msimerson, @fetsorn, @manoharreddyporeddy, @lancatlin, @mifi, @meowingwhitey, @sheplu, @krsriq, @ravibisht, @wojtekmaj, @aqeelat, @melikhov-dev, @alexstrat, @isnifer, @TorstenDittmann, @Uzlopak, @gurgunday, @kurtextrem, @hdtmccallie, @proudparrot2, @bewinsnw, @jonboulle, @alexander-akait, @alxndrsn, @DimitriPapadopoulos, @greggman, @jkbach, @julien-c, @risu729, @JohnSimumatik, @dhouck, @pedro-php, @aminerol, @robertsky, @ipetrouchtchak-fi, @tinhochu, @Lord-Kamina, @joshkel, @raiandexter0607, @NateEag, @rmhaiderali, @ljeda

¿Interesado en escribir una publicación? Revisa nuestras directrices para empezar.

Leer las directrices