¿¡Hay un NUEVO gestor de paquetes!? (Alternativa a Bun)

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

Transcript

00:00:00Este es Nub, un kit de herramientas de JavaScript todo en uno que funciona sobre Node en lugar de reemplazarlo.
00:00:04Reemplaza todas estas herramientas que usas actualmente, desde el gestor de paquetes,
00:00:08que es cinco veces más rápido que pnpm, hasta el ejecutor de TypeScript que puede reemplazar a TSX,
00:00:13e incluso un gestor de versiones de Node. Tiene las mejores características de Bun pero sobre un Node.js nativo,
00:00:17y esa es probablemente la razón por la que Nub es simplemente Bun al revés.
00:00:21Sé que a los desarrolladores de JavaScript les encanta reinventar la rueda, pero este no es el proyecto
00:00:25de cualquier persona. En realidad está hecho por Colin, el creador de Zod, quien hizo la prueba de
00:00:29concepto de tRPC e incluso trabajó en Bun. Así que vamos a profundizar y echarle un vistazo.
00:00:38Nub es un binario único en Rust y funciona con Mac, Windows y Linux. Y como mostré al principio,
00:00:44estas son solo algunas de las herramientas que puede reemplazar. Es un ejecutor de archivos, ejecutor de scripts,
00:00:47ejecutor de paquetes, gestor de paquetes y gestor de versiones de Node. Revisemos cada uno.
00:00:52En primer lugar, el ejecutor de archivos, y solo esto tiene muchísimas funciones. Admite TypeScript
00:00:56completo, no solo la eliminación de tipos como haría Node, por lo que puede reemplazar a TSX o TSNode.
00:01:02Aquí podemos ver que tengo un archivo TypeScript con enums, namespaces y propiedades de
00:01:06parámetros, algo que Node normalmente no puede ejecutar. Si simplemente ejecuto Nub y luego el
00:01:11archivo que quiero correr, se ve que funciona perfectamente, mientras que fallaría en Node.
00:01:15Si reemplazo Nub por Node aquí, vemos que aparece un error de sintaxis de TypeScript no compatible,
00:01:20ya que no acepta el namespace ni el enum. El ejecutor de archivos también reemplaza herramientas como .env,
00:01:24importando variables de entorno automáticamente. Admite archivos .env, .env local y los de entorno
00:01:29de Node, e incluso tiene expansión automática de variables. Aquí abajo podemos tener una
00:01:33variable compuesta por otras variables de entorno. Tenemos el usuario y el host de la
00:01:37base de datos. Si ejecuto este archivo con Nub, se ve que me importa esas variables de entorno
00:01:41y ha construido mi URL de health check usando los valores de las otras variables.
00:01:46También se ve que mi clave de API no coincide con la que tengo en el archivo .env.
00:01:50Eso es porque .env local siempre tendrá prioridad, y aquí tengo la clave de API
00:01:54configurada para suscribirse a Better Stack. Es algo que definitivamente deberías hacer si quieres estar
00:01:58al día con noticias de IA y desarrollo. Por favor suscríbete, de verdad ayuda. Ahora voy a ejecutar
00:02:02nub y luego src/index.tsx, y podemos ver que todo funciona aquí. Es
00:02:07mi demostración completa de Nub. En el código de ese archivo uso muchísimas funciones del ejecutor de archivos de Nub.
00:02:12Una de las primeras es que podemos importar archivos JSON, además de YAML,
00:02:15HTML e incluso archivos de texto, y también reemplaza herramientas como tsconfig-paths. Las rutas que configuré
00:02:20aquí con @config en mi tsconfig se van a resolver correctamente a través de Node.
00:02:24También admite decoradores, como service y sealed aquí. Tiene
00:02:29soporte para JSX y de hecho transpilará esto según tu configuración de tsconfig, e incluso puedes usar
00:02:34palabras clave modernas como “using” para la gestión explícita de recursos. Además de todo eso,
00:02:38ofrece soporte para muchísimas API modernas, como Web Workers, Temporal y muchas otras. Aplicará polyfills
00:02:43automáticamente en versiones de Node que no las admitan, y activa funciones experimentales
00:02:48de Node, como el soporte para localStorage. Esto es solo la punta del iceberg de todas las funciones
00:02:52que admite el ejecutor de archivos, pero también quiero mencionar que es 100 % compatible flag por flag
00:02:56con Node. Al final, como solo ejecuta Node, simplemente reenvía esos flags. Significa que si tu
00:03:01script no usa funciones incompatibles con Node, puedes cambiar Nub por Node y obtener el
00:03:06mismo resultado exacto. Todo esto se logra casi sin impacto en la velocidad.
00:03:10Debería ser lo más cercano posible a Node, y según su documentación, toma exactamente el mismo
00:03:14tiempo ejecutar un archivo con Nub que con Node. Admito que no será más rápido que Bun, ya que Bun es
00:03:19un entorno de ejecución nativo que reemplaza a Node, y Nub está construido sobre Node. Decidí hacer mi
00:03:24propio benchmark en mi Mac para ver cuál era más rápido, y al acomodar la vista
00:03:28un poco mejor, vimos que Node fue en realidad el más rápido para mí. No tuvo la misma velocidad
00:03:31que Nub; Nub se quedó un poco atrás, pero TSX fue más lento que ambos. Pasando a otra cosa que no sea el
00:03:36ejecutor de archivos, la segunda función es el gestor de versiones de Node. Se acabaron los días de necesitar NVM o
00:03:41FNM. En Nub, si tengo un archivo en mi proyecto llamado node-version, o si lo defino en .nvmrc o incluso
00:03:46en el package.json, Nub instalará automáticamente la versión requerida directamente desde Node.js.
00:03:52Actualmente este proyecto usa la última versión de Node 26. Si cambio este archivo para que diga algo
00:03:56como 24 y lo vuelvo a ejecutar con Nub, me descargará esa versión de Node automáticamente. También tiene todos los
00:04:02comandos habituales de gestión que esperabas: podemos instalar versiones de Node, listar las instaladas,
00:04:06desinstalarlas, e incluso fijar la versión, lo que escribirá el archivo de versión de Node
00:04:10por ti. Realmente es así de simple, así que pasemos a las siguientes tres funciones,
00:04:15que es donde Nub puede reemplazar a pnpm y a Bun. La primera es la tercera función, que es el
00:04:20gestor de paquetes. Promete ser cinco veces más rápido que pnpm, y yo pensaba que pnpm ya era
00:04:25superrápido. Funciona como esperas: “nub install” instala los paquetes, pero algo genial
00:04:31es que puede adoptar tus archivos lock existentes. Si usaste Bun o pnpm en un proyecto
00:04:36anterior, Nub actualizará esos archivos lock en lugar de crear uno propio. Esto hace que sea superfácil
00:04:41cambiar entre ellos si lo necesitas, y lo mismo aplica para la compatibilidad con pnpm. Cada comando
00:04:46de gestión de paquetes en Nub es idéntico a pnpm, incluidas las funciones avanzadas como los
00:04:51catálogos de monorepositorios. Usa los mismos flags, por lo que intercambiar pnpm y Nub debería funcionar directamente. Y si
00:04:57usas npm, Bun o Yarn, también detectará las opciones de configuración de esos gestores.
00:05:02En cuanto a la afirmación sobre la velocidad, las pruebas sitúan a Nub como el más rápido en instalaciones
00:05:06con caché lista, tardando 346 milisegundos en instalar 1168 paquetes. En mi equipo hice una
00:05:13prueba con 14 dependencias directas que se resolvieron en 212 paquetes únicos, y el benchmark demuestra que Nub es
00:05:19el más rápido. Nub instaló mis paquetes en 136 milisegundos, Bun quedó segundo con 239 milisegundos,
00:05:25y pnpm y npm tardaron más de un segundo, por lo que la velocidad prometida parece ser cierta en mi equipo,
00:05:30con unos tiempos realmente impresionantes. El gestor de paquetes también toma lo mejor de pnpm en lo
00:05:35referente a seguridad: requiere una antigüedad mínima de publicación de 24 horas por defecto y no ejecutará scripts de compilación
00:05:40a menos que estén aprobados, así estarás a salvo de la mayoría de ataques de la cadena de suministro. La siguiente gran parte de un gestor
00:05:45de paquetes es la ejecución real de paquetes, que es la función número 4, y lo más destacado aquí es que
00:05:49es 19 veces más rápido que npx. El comando “nub x” apunta directamente a la carpeta de binarios dentro de node_modules,
00:05:54por lo que en Rust ejecuta los binarios directamente sin crear un proceso de Node intermedio
00:05:59en el envoltorio. Esto significa que funciona con cualquier gestor de paquetes ya que va directo a
00:06:03esos node_modules. Al igual que con la mayoría de los comandos de Nub, es 100 % compatible flag por flag con
00:06:07pnpm exec, incluyendo los comandos dlx. Al ejecutar un benchmark en mi Mac, Nub fue en realidad el
00:06:12más rápido con 169 ms para ejecutar esbuild, frente a los 423 ms de pnpm, por lo que nuevamente las afirmaciones de velocidad son reales.
00:06:20La última función que necesitas en un gestor de paquetes es el ejecutor de scripts, y al parecer este
00:06:24es 24 veces más rápido que pnpm run, además de incluir hooks de ciclo de vida, variables de entorno de npm
00:06:29y reenvío de argumentos. Cuando usas npm o pnpm, estos inician programas de Node.js,
00:06:34cargando el JavaScript de cada gestor de paquetes en cada ocasión, mientras que Nub solo usa su binario en Rust
00:06:38sin procesos de inicio. Mis benchmarks locales volvieron a mostrar que “nub run” fue el más rápido,
00:06:43aunque no por el margen tan amplio que se veía en la documentación. También vale la pena señalar,
00:06:47y es la cuarta vez que lo digo en este video, que este comando es totalmente compatible flag por flag
00:06:51con pnpm, lo que significa que también admite las funciones de monorepo de pnpm. Algo que quiero destacar
00:06:56sobre estas últimas tres funciones es que Nub no reinventó la rueda. De hecho usa
00:07:00OBE internamente, que es un gestor de paquetes escrito por JDX, el creador de
00:07:04Mise. Él hizo que el gestor de paquetes fuera integrable por otras librerías, y Colin trabajó
00:07:08con él para usarlo en Nub, así que no es trabajo robado. Esas son las características principales
00:07:13de Nub, pero aún queda mucho más por explorar, como la GitHub Action
00:07:17que reemplaza directamente a la oficial de setup-node. Realmente ha sido creado para hacer que todo
00:07:21lo relativo a Node sea mucho más fácil. Pero esta es la pregunta que me sigo haciendo: ¿realmente usaría
00:07:26esto? En mi caso, la respuesta es sí en ciertos escenarios. Seré honesto, soy un usuario bastante
00:07:31asiduo a Bun y no he tenido problemas de compatibilidad en mi desarrollo. Quizás con la nueva
00:07:35versión en Rust termine migrando, pero aun así usaría pnpm para todo lo demás, y debo
00:07:40admitir que nunca me ha parecido que pnpm sea lento. También uso Mise para gestionar mi versión
00:07:44de Node, así que no me veo necesitando esa parte. Sin embargo, sí me veo usando
00:07:48el ejecutor de archivos que reemplaza a TSX. No obstante, el caso de uso definitivo que veo para mí es cuando
00:07:52uso máquinas virtuales desechables. A veces las creo rápidamente para hacer algunas
00:07:57pruebas, y si solo quiero empezar a trabajar con Node, creo que Nub es uno de los paquetes más completos
00:08:01y la forma más rápida y fácil de hacerlo. Así que es más bien mi costumbre
00:08:05lo que me impide usar Nub a diario, pero me gustaría saber qué usas tú
00:08:08como gestor de paquetes, y si le darías una oportunidad a Nub, o si estás pensando en cambiarte desde
00:08:12Bun ahora que está reescrito en Rust. Dímelo en los comentarios de abajo, o si ya están
00:08:16suscritos, y como siempre, nos vemos en el próximo video.

Key Takeaway

Nub combina un gestor de paquetes 5 veces más rápido que pnpm y un ejecutor de scripts en Rust sobre un runtime de Node.js nativo sin necesidad de reemplazar el entorno de ejecución.

Highlights

  • Nub es un binario único escrito en Rust que funciona sobre Node.js nativo en Mac, Windows y Linux.

  • El creador de Zod y la prueba de concepto de tRPC, Colin, desarrolló Nub integrando el gestor OBE de JDX.

  • El gestor de paquetes de Nub instala dependencias en 136 ms para 212 paquetes únicos, superando los 239 ms de Bun y más de un segundo en pnpm.

  • El ejecutor de paquetes nub x es 19 veces más rápido que npx al llamar directamente a los binarios en node_modules sin envoltorios de Node.

  • Soporta características avanzadas de TypeScript como enums, namespaces, decoradores y propiedades de parámetros que fallan al ejecutarse directamente en Node.js.

Timeline

Arquitectura y creador de Nub

  • Nub funciona como una herramienta todo en uno integrada sobre Node.js nativo en lugar de actuar como un runtime sustituto.
  • Colin, desarrollador de Zod y colaborador previo en Bun, diseñó esta herramienta compilada en Rust.

A diferencia de Bun, que reemplaza el entorno de ejecución por completo, esta solución se ejecuta directamente sobre la instalación existente de Node. Su binario en Rust consolida la gestión de paquetes, ejecución de scripts, soporte de TypeScript y administración de versiones del sistema en un solo binario multiplataforma.

Capacidades del ejecutor de archivos y compatibilidad con TypeScript

  • El ejecutor transpila sintaxis avanzada de TypeScript que el motor nativo de Node rechaza.
  • Inyecta variables de entorno automáticamente procesando archivos .env y resolviendo referencias cruzadas.
  • La compatibilidad flag por flag permite sustituir Node.js por Nub sin alterar el comportamiento de la aplicación.

El sistema procesa componentes de TypeScript como namespaces, enums y decoradores sin requerir TSX o TSNode. Importa de forma nativa archivos en formato JSON, YAML, HTML y texto, aplicando polyfills automáticos para API modernas como Web Workers y Temporal. Las pruebas de ejecución muestran un rendimiento superior a TSX e idéntico a Node puro.

Gestión automática de versiones de Node.js

  • Nub detecta los archivos de configuración de versión e instala el entorno necesario directamente desde los servidores oficiales.
  • Sustituye a herramientas dedicadas como NVM o FNM mediante comandos directos de fijación e instalación.

Al identificar un archivo .nvmrc, node-version o la clave correspondiente dentro del package.json, el sistema descarga automáticamente la versión especificada de Node.js. El CLI incluye comandos para listar, desinstalar e intercambiar versiones de Node sin configurar gestores externos.

Rendimiento y seguridad del gestor de paquetes

  • La instalación con caché limpia completa 212 paquetes en 136 milisegundos.
  • Adopta archivos lock y configuraciones existentes de pnpm, npm, Yarn y Bun.
  • Bloquea la ejecución automática de scripts de compilación y exige 24 horas de antigüedad mínima en los paquetes publicados.

El motor de paquetes reutiliza la infraestructura del proyecto OBE para mantener total compatibilidad con la sintaxis y funciones de monorepo de pnpm. La política de seguridad por defecto protege contra ataques en la cadena de suministro al restringir paquetes recién publicados. En pruebas locales de instalación, los tiempos superan a Bun (239 ms) y reducen sustancialmente la espera respecto a pnpm.

Ejecución de binarios y scripts en Rust

  • El comando nub x ejecuta binarios directo desde node_modules en 169 ms frente a los 423 ms de pnpm.
  • El ejecutor de scripts evita la sobrecarga de arranque al omitir el proceso intermedio de Node en cada llamada.
  • Nub simplifica la preparación de entornos en máquinas virtuales efímeras al consolidar todo el flujo de trabajo.

Al invocar herramientas de línea de comandos mediante nub x, el binario nativo en Rust accede de forma directa a la carpeta de binarios omitiendo la inicialización de wrappers en JavaScript. Los hooks de ciclo de vida, reenvío de argumentos y variables de entorno de npm mantienen compatibilidad exacta con pnpm run. La integración mediante la GitHub Action oficial permite reemplazar setup-node en flujos de integración continua.

Community Posts

View all posts