Bun 1.4 acaba de eliminar 15 de tus dependencias

BBetter Stack
Computing/SoftwareInternet Technology

Transcript

00:00:00La actualización más grande y polémica de Bun acaba de llegar: Bun 1.4, la versión reescrita en Rust.
00:00:04Ya hice un video antes sobre el drama de la reescritura, así que centrémonos en las novedades,
00:00:07porque algunas realmente me gustan, sobre todo las de la biblioteca estándar,
00:00:11ya que ahora incluye un navegador sin interfaz, biblioteca de imágenes, pseudoterminal, Markdown,
00:00:15tareas cron, tablas y más, reemplazando 15 dependencias que quizás estés usando.
00:00:19En los últimos años, una de las mayores quejas en JavaScript ha sido la falta de una biblioteca
00:00:23estándar, y Bun lo está solucionando, lo cual es un gran avance en un mundo de ataques semanales a la cadena de suministro.
00:00:30Primero, podemos desinstalar Playwright y Puppeteer para usar Bun WebView en su lugar.
00:00:37Con este código de aquí, puedo controlar un navegador sin interfaz, buscar el botón de suscríbete y hacer clic,
00:00:41aunque todavía no puedo ejecutar esto en tu máquina, así que tendrás que hacer clic en suscribirte por mí.
00:00:44Todos los métodos de entrada como clic, escribir, pulsar y desplazar simulan eventos nativos del navegador,
00:00:48por lo que la página debería pensar que eres un usuario real. En Mac, esto usa el WebKit del sistema,
00:00:52es decir, el motor de Safari, lo que significa que no hay nada que instalar, pero si quieres una instancia de Chrome,
00:00:56puedes configurar la opción backend como Chrome, y esto usará una instancia instalada de Chrome o Chromium,
00:01:01que es lo que harías si usas Windows o Linux. Esto puede ejecutar un subproceso de Chrome sin interfaz
00:01:04o conectarse a una instancia de Chrome que ya esté abierta; así, usando este código,
00:01:09puedo controlar la versión abierta de Chrome en mi Mac, todo desde Bun. Además de esto,
00:01:13también puedes usar Evaluate para ejecutar JavaScript en la página y obtener los resultados como valores
00:01:17nativos de JavaScript. Si todavía no hay una API para alguna función que quieras, puedes recurrir
00:01:21a los comandos nativos de CDP. Creo que esto es bastante útil para automatizaciones web ligeras;
00:01:25no creo que reemplace por completo a Playwright todavía, ya que no tiene unejecutor de pruebas ni visor de trazas,
00:01:29pero para cosas como extracción de datos o scripts de uso por computadora, no es una mala opción.
00:01:32A continuación, desinstalemos Sharp y usemos Bun.image en su lugar. Es una biblioteca de imágenes completa
00:01:37que nos permite tomar un archivo, aplicarle .image y luego encadenar operaciones como cambiar el tamaño, rotar,
00:01:42voltear en horizontal, voltear en vertical, cambiar el brillo, la nitidez y convertirla a varios formatos
00:01:46de imagen diferentes. También te permite leer metadatos, como el ancho, el alto y el formato,
00:01:50sin necesidad de decodificar los datos de los píxeles. Otra opción genial que me gusta mucho es la capacidad de crear
00:01:54una imagen de marcador de posición. Es una versión de baja calidad que puedes incrustar en HTML antes de que cargue la imagen real.
00:01:59Bun.image es una de las funciones que más me entusiasma usar porque ya he tenido problemas
00:02:04en implementaciones y compilaciones anteriores relacionados con Sharp. Ahora, si uso Bun,
00:02:08ya no tengo que preocuparme por eso. Tampoco tengo que pensar más en Marked, porque ahora podemos
00:02:12simplemente usar Bun.markdown para analizar Markdown. Consta de solo tres API.
00:02:16Bun.markdown.html convierte Markdown en una cadena HTML. Bun.markdown.render renderiza Markdown con
00:02:22retollamadas personalizadas para cada elemento. Esto te da la flexibilidad de generar HTML con clases personalizadas,
00:02:27salida de terminal ANSI o cualquier otro formato de cadena. Bun.markdown.react renderiza Markdown a React.jsx,
00:02:33y también te permite pasar cualquier componente que desees para cada elemento, para que puedas obtener un Markdown
00:02:37con un diseño excelente. También hay varias opciones que puedes alternar para controlar las características
00:02:41de Markdown que prefieras. Puedes habilitar tablas con formato de GitHub, enlaces automáticos,
00:02:45identificadores de encabezados y enlaces wiki, aunque una advertencia que señalan es que la salida HTML no está depurada,
00:02:50por lo que el HTML sin procesar, los atributos de eventos en los encabezados y JavaScript pasan directamente;
00:02:54así que si renderizas Markdown escrito por usuarios, eso sigue siendo un problema tuyo de seguridad. A pesar de esto,
00:02:59se genera tanto Markdown hoy en día que me parece una incorporación bastante útil. Siguiendo adelante,
00:03:03ahora puedes desinstalar Node.pty. Bun.terminal te ofrece una pseudoterminal integrada que te permite controlar
00:03:08Bash, Vim o HTOP desde JavaScript. Si alguna vez has intentado empaquetar una terminal dentro de una aplicación Electron,
00:03:12ya sabes lo doloroso que es. Esto es en realidad una ampliación de Bun.spawn. Le pasas la opción terminal y
00:03:17genera un subproceso con una pseudoterminal adjunta. El subproceso ve una terminal real, lo que permite
00:03:22salida en color, movimiento del cursor y avisos interactivos. Una vez que tienes una terminal, puedes
00:03:26escribir datos en ella, cambiar su tamaño, cerrarla y mucho más. También puedes
00:03:31crear tu propia terminal, lo que te permite reutilizarla en varios subprocesos. Empiezo a ver un patrón
00:03:35en todas estas funciones. Parecen cosas que Claude Code utilizaría, así que ojalá abrieran el código
00:03:39para ver cómo se usan a gran escala. La siguiente dependencia que vamos
00:03:43a desinstalar es Node.cron, porque ahora podemos usar simplemente Bun.cron. Si le pasas una función,
00:03:47se ejecutará directamente en el bucle de eventos sin involucrar al cron del sistema; pero si le pasas un script,
00:03:51registrará una tarea cron a nivel de SO que usa crontab en Linux, launchd en macOS
00:03:56y el programador de tareas en Windows. Puedes usar la sintaxis cron estándar, incluyendo días con nombre y ayudas como
00:04:01diario, y también permite analizar dicha sintaxis cron, lo que devolverá la siguiente fecha coincidente
00:04:05en la zona horaria local del sistema. Y hablando de zonas horarias, todas las tareas se ejecutan en la hora local por defecto,
00:04:11pero incluye opciones explícitas para cambiarlo, para que estés seguro de cuándo se va a ejecutar.
00:04:15Lo siguiente en mi lista es decirte que desinstales concurrently o npm-run-all, porque Bun ahora incluye
00:04:20su propia opción de ejecución en paralelo. Usar este parámetro te permite ejecutar varios scripts de package.json de forma concurrente,
00:04:24y la salida muestra ordenadamente el nombre del script como prefijo. También te permite usar patrones glob
00:04:28para los nombres de los scripts, cuenta con un filtro para determinar en qué paquetes de tu espacio de trabajo
00:04:32ejecutar el comando, y ofrece una opción para que los demás scripts sigan corriendo si uno de ellos da error. Tampoco
00:04:37tiene por qué ser solo concurrente; también puedes usar la opción secuencial para ejecutar scripts uno tras otro
00:04:41con el mismo prefijo en la salida y opciones de filtrado. Esta es probablemente la función que más creo que voy a usar.
00:04:45Nuestra siguiente baja es cualquier biblioteca de archivos tar. Bun.archive es una implementación nativa y rápida
00:04:50de tar y gzip. Crear uno es simplemente un objeto donde las claves son las rutas y los valores son los
00:04:55contenidos, y dichos contenidos pueden ser cualquier cosa, desde una cadena, un blob, un Uint8Array hasta un array buffer. Para la compresión,
00:05:00también puedes usar la opción compress configurada en gzip, y un nivel del 1 al 12. Obviamente, luego puedes
00:05:05extraerlos con opciones como un patrón glob para extraer solo archivos específicos, y una característica que me gusta mucho
00:05:10es que puedes leer un archivo comprimido sin necesidad de extraerlo. Este código de aquí puede obtener lodash del registro
00:05:14de npm y leer su archivo package.json sin extraer ni un solo archivo. Hasta ahora hemos eliminado la necesidad
00:05:19de unos 7 paquetes de npm, y aún quedan más, aunque estos últimos son funciones más pequeñas que podemos
00:05:24repasar más rápido. Primero, Bun.serve ahora puede servir archivos estáticos, reemplazando la necesidad de
00:05:28serve-static, lo cual es genial para la carpeta pública de tu sitio web. Segundo, Bun añadió compatibilidad
00:05:33con JSON5 y XML, por lo que ya no necesitas sus paquetes. Puedes importar, analizar y serializar ambos
00:05:38formatos directamente en Bun. Los últimos tres son ayudantes para la terminal: tenemos Bun.sliceAnsi, Bun.wrapAnsi
00:05:43y Bun.stringWidth, que ofrecen recortes, ajustes de línea y mediciones adaptados a las columnas de la terminal,
00:05:47eliminando la necesidad de paquetes como slice-ansi, cli-truncate, wrap-ansi y string-width.
00:05:52En total, se han ido unos 15 paquetes, y solo he cubierto cerca de la mitad de esta versión.
00:05:56El resumen de gran parte de esta publicación del blog es que muchas cosas se volvieron más rápidas, el uso de CPU mejoró, el inicio
00:06:01es más rápido y, a pesar de todas estas funciones, el binario se redujo un 17%. Ah, y está escrito en Rust.
00:06:06Una característica adicional que vale la pena mencionar es que Bun.install ahora incluye un almacén virtual global.
00:06:10Si activas el enlazador aislado, los paquetes se extraen una sola vez en tu equipo y se vinculan simbólicamente
00:06:14a tus node_modules, en lugar de copiarse por separado en cada proyecto. Esto debería
00:06:19acelerar las cosas y ahorrar espacio si tienes muchos proyectos. ¿Qué opinas de Bun ahora?
00:06:23¿Lo usas? ¿Vas a utilizar alguna de estas funciones? Házmelo saber en los comentarios más abajo,
00:06:27espera, suscríbete y, como siempre, nos vemos en la próxima.
00:06:36Nos vemos la próxima vez.

Key Takeaway

Bun 1.4 integra una biblioteca estándar ampliada escrita en Rust que elimina 15 dependencias externas comunes en JavaScript e introduce un almacén virtual global.

Highlights

  • Bun 1.4 incorpora una reescritura en Rust que reduce el tamaño de su binario en un 17 por ciento.

  • La nueva biblioteca estándar de Bun reemplaza 15 dependencias externas, incluyendo gestores de imágenes, terminales y tareas cron.

  • Bun.webView controla navegadores sin interfaz y simula eventos nativos para automatizaciones web ligeras.

  • Bun.image opera como una biblioteca completa de imágenes que sustituye a Sharp sin decodificar píxeles para metadatos.

  • Bun.cron ejecuta tareas directamente en el bucle de eventos o mediante programadores a nivel de sistema operativo.

  • El almacén virtual global de Bun.install extrae los paquetes una sola vez en el equipo y los vincula mediante enlaces simbólicos.

Timeline

Novedades de la biblioteca estándar de Bun 1.4

  • Bun 1.4 llega como la versión reescrita en Rust.
  • La biblioteca estándar incluye un navegador sin interfaz, biblioteca de imágenes, pseudoterminal, Markdown y tareas cron.
  • Esta actualización reemplaza 15 dependencias externas de uso frecuente en JavaScript.

La falta de una biblioteca estándar en JavaScript genera quejas recurrentes, por lo que esta versión aporta soluciones integradas para reducir la dependencia de paquetes externos y mitigar vulnerabilidades en la cadena de suministro.

Automatización web con Bun WebView

  • Bun WebView permite desinstalar Playwright y Puppeteer para controlar navegadores sin interfaz.
  • Los métodos de entrada simulan eventos nativos del navegador para replicar la interacción de un usuario real.
  • El sistema utiliza WebKit en Mac y soporta instancias de Chrome o Chromium en Windows y Linux.

El código permite ejecutar acciones como clics y escritura, además de evaluar JavaScript en la página y utilizar comandos nativos de CDP. Resulta útil para extracciones de datos y automatizaciones ligeras, aunque carece de un ejecutor de pruebas dedicado.

Manipulación de imágenes y análisis de Markdown

  • Bun.image reemplaza a Sharp con operaciones encadenadas para cambiar tamaño, rotar y modificar brillo.
  • La lectura de metadatos se realiza sin decodificar los datos de los píxeles.
  • Bun.markdown analiza y convierte Markdown a cadenas HTML, código JSX de React o salidas de terminal ANSI.

Estas funciones nativas evitan problemas de compilación previos asociados a bibliotecas externas. El analizador de Markdown ofrece opciones para tablas con formato de GitHub e identificadores de encabezados, manteniendo la responsabilidad de seguridad sobre HTML sin procesar.

Terminal integrada, tareas cron y ejecución concurrente

  • Bun.terminal sustituye a Node.pty al ofrecer una pseudoterminal integrada para controlar Bash, Vim o HTOP.
  • Bun.cron reemplaza a Node.cron mediante la ejecución de funciones en el bucle de eventos o tareas a nivel de sistema operativo.
  • Bun.archive opera como una implementación rápida de tar y gzip capaz de leer archivos comprimidos sin extraerlos.

Los subprocesos con pseudoterminal adjunta permiten salida en color y movimiento del cursor. Asimismo, la ejecución de scripts en paralelo elimina la necesidad de herramientas como concurrently y el manejo de archivos tar evita dependencias externas adicionales.

Mejoras de rendimiento y almacén virtual global

  • Bun.serve, JSON5, XML y herramientas de terminal eliminan paquetes adicionales como serve-static y slice-ansi.
  • El tamaño del binario se reduce un 17 por ciento mientras mejoran la velocidad de inicio y el uso de CPU.
  • Bun.install introduce un almacén virtual global que vincula simbólicamente los paquetes en lugar de duplicarlos por proyecto.

El conjunto de optimizaciones elimina un total aproximado de 15 paquetes externos. El enlace aislado optimiza el espacio en disco y acelera la instalación en equipos con múltiples desarrollos activos.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video