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.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video