Javascript Debería Venir Con Baterías

Rate this content
Bookmark

Configurar proyectos de JavaScript no es divertido. Empezar implica instalar y configurar node, tsc, prettier, eslint, un marco de pruebas, un controlador de base de datos, y más. ¿Por qué JavaScript no incluye baterías? En esta charla hablaremos de cómo Deno soluciona esto, permitiéndote concentrarte en construir cosas. Exploramos qué beneficios desbloquea la integración completa de herramientas, y recordamos lo divertido que es programar si tus herramientas te ayudan, en lugar de requerir tu cuidado constante.

Luca Casonato
Luca Casonato
30 min
08 Dec, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Javascript Debería Venir Con Baterías: Deno es un entorno de ejecución de JavaScript de próxima generación que aborda la falta de herramientas integradas en JavaScript. Proporciona una forma segura y sencilla de desarrollar aplicaciones con pruebas integradas, linting, formateo, y un servidor de lenguaje para VS Code. Deno es compatible con Node.js y NPM, soporta APIs estándar de la web, y permite la portabilidad de código entre el frontend y el servidor. También ofrece características como una base de datos integrada, un almacén de clave-valor, y monetización transparente con Deno Deploy.

Available in English

1. Introducción a JavaScript y Premisa de la Charla

Short description:

Hola a todos. Gracias por estar aquí. Soy Luca, ingeniero de software en la empresa Deno. Mi charla es JavaScript Debería Venir Con Baterías. JavaScript carece de una biblioteca estándar extensa y herramientas predeterminadas, lo que requiere que los desarrolladores configuren todo ellos mismos. Esto incluye formateadores, linters, marcos de prueba y paquetes adicionales para diversas tareas.

Hola a todos. Gracias por estar aquí. Sé que es muy tarde. Probablemente todos estén muy cansados y quieran irse a casa. Así que les contaré algo que no sea React, por una vez. Probablemente han tenido muchas charlas de React hoy porque estamos en una conferencia de React. Pero no lo sé. Voy a hablar más sobre JavaScript porque, hey, React es realmente solo JavaScript, ¿verdad? ¿Y por qué no hablamos un poco sobre JavaScript?

Así que mi charla es JavaScript Debería Venir Con Baterías. Y déjenme explicar... En realidad, permítanme primero presentarme. Eso probablemente sea útil. Soy Luca. Soy ingeniero de software en la empresa Deno. Algunos de ustedes pueden haber oído hablar de Deno. Si no, llegaré a eso en un segundo. Trabajo en varias cosas relacionadas con Deno. Construí un marco de frontend para Deno llamado Fresh, que algunos de ustedes pueden haber visto. Y hago un montón de trabajo con standards en T-SYS39, estandarizando el lenguaje JavaScript. Y en WhatWig y W3C, estandarizando cosas como Fetch, HTML. Y soy co-presidente en Widger CG, que es un grupo de community en el W3C donde intentamos hacer que los entornos de ejecución de JavaScript del lado del servidor sean más interoperables. Así que hacer que node.js funcione mejor con Deno, y Deno mejor con CloudFlow Workers, con RUN, con lo que sea, ¿verdad?

Así que sobre mi charla de hoy. Tengo esta premisa que voy a intentar argumentar, que es que JavaScript es demasiado básico y esto es malo. Y lo que quiero decir con esto es que JavaScript realmente no tiene una biblioteca estándar extensa o herramientas predeterminadas. Sino que, más bien, todos tienen que empaquetar todo lo que quieren en su proyecto juntos por sí mismos. Y esto significa que si estás configurando un nuevo proyecto, tienes que mirar fijamente una tabla como esta y llenar el lado derecho. Necesito un formateador, así que déjame elegir un formateador. ¿Uso Dprint, uso Prettier, simplemente uso el autoformateo en VS Code, o no uso ninguno? Linting, testing, ¿quiero usar TypeScript o no? Si es así, ahora necesito que todas mis herramientas soporten TypeScript. Tal vez quiero configurar benchmarking, generación de documentation, si tengo una biblioteca. Y luego necesitas incorporar un montón de paquetes para cosas que vas a necesitar hacer. Necesitas incorporar un paquete para hacer análisis de YAML porque tienes un archivo de configuración que está escrito en YAML que otro equipo te dio.

2. Desafíos con Herramientas y Dependencias

Short description:

O tienes algún servicio que estás llamando y falla con mucha frecuencia, por lo que quieres hacer eso con reintentos, necesitas incorporar alguna biblioteca para eso. Y esto termina con cada herramienta y API que necesitas, necesitas tener un paquete más que instalar. Así que tienes esta carpeta package.json muy grande. Y esto se vuelve aún más complicado porque hay tantas herramientas diferentes por ahí. Cuando quieres usarlas juntas, las cosas se vuelven aún más complicadas.

O tienes algún servicio que estás llamando y falla con mucha frecuencia, por lo que quieres hacer eso con reintentos, necesitas incorporar alguna biblioteca para eso. Y esto termina con cada herramienta y API que necesitas, necesitas tener un paquete más que instalar.

Así que tienes esta carpeta package.json muy grande. Y esto se vuelve aún más complicado porque hay tantas herramientas diferentes por ahí. Cuando quieres usarlas juntas, las cosas se vuelven aún más complicadas. Puedes instalar ESLint. Espero que tu cerveza esté bien. Entonces, cuando instalas ESLint y quieres usarlo con TypeScript, eso no funciona de inmediato. Necesitas instalar otra herramienta llamada TypeScript ESLint. No solo instalas uno, instalas dos paquetes, agregas un montón de cosas a tu archivo de configuración de ESLint, también necesitas tener un archivo de configuración para ESLint. Lo mismo ocurre con JSX, necesitas agregar plugins para eso. ESLint es bastante bueno con ESM.

Una de las herramientas destacadas aquí con respecto al soporte de ESM todavía no podía usar archivos de configuración hasta hace un par de semanas, meses, no lo sé. Pero hay algunas realmente malas, y no quiero odiar a la gente que construye Jest. Gran parte de esto se reduce a que otros proyectos que utilizan no soportan bien las herramientas, pero Jest y TypeScript, configurar eso, no es divertido. Quieres agregar JSX a la mezcla, necesitas configurar más. Aquí, ni siquiera estás configurando para Jest, ¿estás configurando para Babel? Es como, está bien, supongo que ahora estoy usando Babel. Y ESM, simplemente no uses ESM si usas Jest. Si quieres probar en ESM, simplemente no uses Jest. Y luego tu carpeta de módulos de nodo se ve así. Tienes 100 dependencias en tu package.json, y una carpeta de módulos de nodo de 300 megabytes. Y solo tienes un archivo de configuración, y luego tienes un proyecto como este, ¿verdad? E imagina llegar a una empresa y descargas el repositorio, y quieres empezar a trabajar, y te encuentras con esto. Esto no es divertido. Esto no es algo que quieras. Solo quieres configurarlo y que todo funcione. Y quieres empezar un nuevo proyecto, no quieres tener que configurar esto. Solo quieres que funcione de inmediato. Entonces, ¿cómo resolvemos esto? Y como desarrollador de JavaScript, puedes estar preguntándote, sí, ¿cómo resolvemos esto? Pero si a veces te mueves por otros ecosistemas de lenguajes, puedes ver que algunos ecosistemas resuelven esto muy bien. Algunos lo hacen muy mal, pero algunos lo hacen realmente bien. Por ejemplo, Rust y Go.

3. La Falta de Herramientas Incorporadas en JavaScript

Short description:

Y los uso específicamente porque tienen la misma edad que JavaScript, por lo que no puedes decir que JavaScript es viejo o que Node es viejo, y por eso, no tiene esto. Como que Go se lanzó el mismo año que se lanzó Node. Y Rust se lanzó solo un par de años después. Y estos tienen bibliotecas estándar y herramientas muy extensas incorporadas. Como que, el formateo viene de serie. Las pruebas vienen de serie. Todos usan el mismo corredor de pruebas.

Y los uso específicamente porque tienen la misma edad que JavaScript, por lo que no puedes decir que JavaScript es viejo o que Node es viejo, y por eso, no tiene esto. Como que Go se lanzó el mismo año que se lanzó Node. Y Rust se lanzó solo un par de años después. Y estos tienen bibliotecas estándar y herramientas muy extensas incorporadas. Como que, el formateo viene de serie. Testing viene de serie. Todos usan el mismo corredor de pruebas. Y me refiero a todos, ¿verdad? No es que el 80% de las personas usen el mismo corredor de pruebas. Todos usan el mismo corredor de pruebas. Y esto es realmente genial, porque puedes empezar en un nuevo proyecto sin gastar tiempo en configuración. Abres una carpeta, creas un archivo, escribes algo de código en el archivo, ejecutas el archivo. Y ese archivo ahora tiene formateo, linting, testing, todo eso configurado de serie. Porque viene con una herramienta que usas para ejecutar el archivo. Si estás trabajando en un equipo, esto significa que no tienes que tener discusiones con tu equipo sobre, como, ¿me gusta ESLint, o como Roam, o lo que sea, ¿verdad? Lo que se esté usando ese día. Todos usan lo mismo. No hay discusiones. Y cambiar entre empresas e incluso equipos dentro de una empresa se vuelve realmente fácil. Porque si conoces las herramientas de un proyecto, se traducen exactamente a cualquier otro proyecto. Porque todos los demás proyectos usan las mismas herramientas.

4. Abordando la Falta de Herramientas Incorporadas

Short description:

Abordemos el problema con la falta de herramientas incorporadas en JavaScript. Ryan Dahl, el creador de Node, reconoció este problema y buscó una solución. Después de usar Go y experimentar con sus herramientas incorporadas, volvió a JavaScript en 2018 con la misión de solucionar el problema.

Entonces, hagamos algo al respecto. ¿Por qué no llegamos a este estado con JavaScript? Esto es algo que mi jefe, Ryan Dahl, pensó hace unos cinco años. Ryan Dahl, si no lo conoces, es el creador original de Node. En 2010 lanzó la primera versión de Node, de hecho en Berlín, en un escenario no muy lejos de aquí. Ryan pasó a usar Go durante un par de años, donde vio todas estas agradables herramientas incorporadas tooling. Y luego volvió a JavaScript en 2018 y se dio cuenta de que había un problema aquí que necesitaba solución.

5. Introducción a Deno y sus Características

Short description:

En mayo de 2020, lanzamos Deno, un entorno de ejecución de JavaScript de próxima generación que es increíblemente simple para empezar. Deno es seguro por defecto y tiene soporte nativo para TypeScript y JSX. Viene con pruebas incorporadas, linting, formateo, un servidor de lenguaje para VS Code, y más. También proporciona APIs estándar de la web de serie y es compatible con Node.js y NPM. Para instalar Deno, solo tienes que ejecutar un solo comando. Instala un solo binario, y puedes empezar a programar de inmediato.

Entonces, en mayo de 2020, diez años después del lanzamiento original de Node, lanzamos Deno para solucionar algunos de estos problemas. Y quiero hablarles un poco sobre eso, mostrarles cómo se ve y qué tipo de experiencia pueden tener cuando las tooling simplemente vienen de serie.

Entonces, un poco sobre Deno. Deno es un entorno de ejecución de JavaScript de próxima generación que es increíblemente simple para empezar. Y no tienen que creerme a mí. Les daré algunas demostraciones de código en un segundo. Realmente lo es. Seguro por defecto, soporte nativo para TypeScript y JSX de serie, tiene incorporado testing, linting, formateo, un servidor de lenguaje para VS Code, generación de documentation, lo que sea, ejecutables de un solo archivo, un bundler, podría seguir y seguir, ¿verdad?

Tiene APIs estándar de la web incorporadas de serie, así que, como, si quieres usar... Si vienes del front end, que probablemente la mayoría de ustedes lo son, eres front-end Hay muchas APIs allí que simplemente conoces. Si quieres hacer una llamada HTTP, usa fetch. Si quieres transmitir algunos datos, usas web streams. Si quieres, como, no sé, almacenar algunas cadenas en una base de datos de clave-valor, muy poco, usas local storage. Es compatible con Node.js y NPM, desde hace poco. Y es utilizado por muchas grandes empresas. Tenemos, como, creo que el sitio web dice 250,000 usuarios activos mensuales, pero no sé. Tiene un par de meses en este punto.

Para instalar Deno, solo tienes que ejecutar un solo comando. Y esto es realmente todo lo que hace. Realmente instala un solo binario. No hay archivos lib, openSSL, nada que necesites instalar. Solo un binario. Y luego puedes empezar. Y luego esto es lo que parece tu proyecto de configuración Deno. No hay nada en la carpeta, ¿verdad? Para empezar, creo un archivo. Y voy a crear un archivo TypeScript. Te dije que puedo ejecutar TypeScript de serie. Así que creo un archivo TypeScript. Y escribo algo de código aquí. Y déjame apagar Copilot, para que no me moleste. ¿Funcionó? Lo hizo.

6. Ejecutando TypeScript y Realizando I.O.

Short description:

Y luego simplemente ejecuto TypeScript. Y esto funciona. Así que realmente ejecutando TypeScript. Ahora hagamos algo de I.O. Permíteme leer un archivo del disco. Hay un archivo agradable que se almacena en todos los sistemas UNIX llamado EDC password. Así que vamos a registrar ese archivo. Si haces esto, en realidad vas a ver algo más. Mira aquí abajo en la terminal. Así que ejecuté Deno. Y me pidió que diera permiso para leer este archivo. Y esto es a lo que me refiero con seguro por defecto.

Fantástico. Y luego simplemente ejecuto TypeScript. Y esto funciona. Y esto es realmente TypeScript, ¿verdad? Como, puedo poner esto aquí, y todavía funciona. Así que realmente ejecutando TypeScript. Sí.

Así que eso es muy básico. Ahora te estás preguntando, como, está bien, puedo hacer un console log. Esto no es muy útil. No puedo hacer nada solo con console logging. Así que hagamos algo de I.O. Permíteme leer un archivo del disco. Hay un archivo agradable que se almacena en todos los sistemas UNIX llamado EDC password. Que a diferencia de lo que sugiere el nombre, en realidad no almacena mi contraseña. Pero es divertido registrarla. Así que vamos a registrar ese archivo.

¿Copilot no se desactivó? Pensé que lo había desactivado. Hmm. Vale. Así que si haces esto, en realidad vas a ver algo más. Mira aquí abajo en la terminal. Así que ejecuté... Permíteme alejarme un poco. Ejecuté Deno. Y me pidió que diera permiso para leer este archivo. Y esto es a lo que me refiero con seguro por defecto. Así que en el navegador, si creas un sitio web y quieres enviar notificaciones a los usuarios, no puedes hacer esto siempre. ¿Verdad? Aparece un aviso al usuario que le pregunta al usuario, oye, ¿realmente quieres que el sitio web sospechoso 36 te envíe notificaciones? Porque probablemente no quieras. Esto es realmente útil. Si estás ejecutando algún script aleatorio de GitHub, y realmente no confías en el autor, simplemente ejecútalo.

7. Permisos de IO y Estándares Web

Short description:

Si intenta hacer algo malo, lo verás. Eso son los permisos de IO. Optas explícitamente por ellos. Deno utiliza estándares web no solo para buscar HTTP, sino incluso para escribir en la salida estándar. La salida estándar de Deno es un flujo de escritura de la web. Trabajamos con otras personas en el espacio para adoptar estas mismas APIs.

Si intenta hacer algo malo, lo verás. Voy a permitir esto. Lo permitiré. Y ahí vamos. Registra mi archivo de contraseña EDC. Así que eso son los permisos de IO. Optas explícitamente por ellos. Puedes hacer esto a través de los mensajes que acabo de mostrarte. También puedes pasar banderas. Así que puedo hacer deno run, guión guión, allow read, minots, y esto evita el mensaje de permiso. Y esto es muy granular, así que también puedes decir leer solo desde EDC o solo desde este archivo específico. Como prefieras.

Web standards. Te dije que tenemos un montón de web standards incorporados. Así que simplemente vamos a buscar algo en la red. Como, no sé, example.com. Y me vas a mirar aquí, como, escribiendo una declaración de búsqueda. Lo hago todos los días. Pero lo que es bastante genial es que, como, Deno utiliza web standards no solo para cosas que son obvias, como buscar HTTP, sino incluso para cosas como escribir en la salida estándar. Así que la salida estándar de Deno es en realidad un flujo web. Como este writable. Es un flujo de escritura de la web. Lo que significa que puedo hacer response.body.pipe a todas las APIs web, ¿verdad? Todas son APIs web. Espero eso. Si ejecuto esto... Transmite el texto a mi consola. Así que realmente usas APIs web en todas partes. Y llevamos esto bastante lejos. Así que, como, intentamos trabajar mucho con otras personas en el espacio. Como con node y con trabajadores de Cloudflow y con Bun para que todos adopten estas mismas APIs.

8. Portabilidad del Código e Importaciones NPM

Short description:

Puedes escribir código que funcione tanto en el frontend como en el servidor. Deno permite importaciones NPM y es compatible con paquetes como Express. Puedes crear fácilmente un servidor HTTP e importar versiones específicas de paquetes. Deno también soporta tipos para paquetes que no los tienen de serie. Puedes escribir un servidor que envíe una respuesta y escuche en un puerto.

Así que ese código que escribes para el frontend puede funcionar en tu servidor. Esto es realmente útil si estás haciendo renderizado en el servidor y hydratación. Quieres ser capaz de compartir el mismo código entre los dos. Pero también si escribes código que necesita ser portátil a través de diferentes tiempos de ejecución del lado del servidor. Y tenemos un grupo de la community en el W3C, un grupo de standards que se ha establecido para hacer esto, donde hablamos de estas cosas y averiguamos qué APIs deberían soportar todos.

Quiero darles una pequeña demostración más. Hagamos algunas importaciones de NPM. Así que te dije que es compatible con versiones anteriores. ¿Qué es más compatible con versiones anteriores o más interesante para la compatibilidad con versiones anteriores que Express? Todo el mundo conoce Express. Así que Deno puede importar Express, obviamente. Construyamos un pequeño servidor HTTP. Para importar paquetes NPM en Deno, simplemente escribes una declaración de importación y los prefijas con NPM colon. Y si quieres importar una versión específica, puedes hacerlo usando un at. Y no ves, no tengo un paquete JSON aquí, no tengo una carpeta de módulos de nodo aquí, nada. Sólo mi línea de código aquí. Y puedo crear una aplicación. Y puedes ver que no tengo tipos aquí, porque esto es una de esas cosas divertidas con el ecosystem existente es que muchos paquetes antiguos no tienen tipos fuera de la caja. Así que si quiero incluir un tipo, tengo que decirle a Deno que quiero esos tipos. Y esto es lo mismo que haces en un paquete JSON, donde especificas tus tipos con, como sacándolos de at types. Así que voy a sacar los tipos aquí de types slash Express. Y ahora puedes ver que tengo tipos y documentation.

Bueno, escribamos un pequeño servidor que tome una solicitud y una respuesta. Y olvido cuál es la API, ¿enviar? Sí, enviar. Eso simplemente envía un hola mundo. Y podrías enviar cualquier cosa aquí, ¿verdad? como podrías renderizar algo de JSX. Si tengo tiempo, puedo mostrarte eso más tarde. Escuchamos en un puerto. Y vamos a registrar que el servidor ha comenzado. Funcionando en HTTP localhost 8000. Vale.

9. Herramientas Integradas y Base de Datos

Short description:

Ejecutemos el código y veamos el servidor en acción. Deno viene con herramientas integradas como el linter y el formateador, que no requieren configuración. El linter resalta las variables no utilizadas, y el formateador asegura un estilo de código consistente. Deno también ofrece una base de datos integrada, eliminando la necesidad de elegir y configurar una base de datos externa. Todo lo que necesitas para desarrollar una aplicación está integrado en el tiempo de ejecución.

Entonces, ejecutemos esto. Confío en Express, así que simplemente voy a ejecutar con todas las banderas para no obtener solicitudes de permiso. Ya te he mostrado esos. Y puedes ver, inició un servidor. Importó Express. De nuevo, todavía no hay carpeta de modules de node, todavía no hay JSON de paquete. Y lo abro, y se ejecuta. Hola mundo.

Bien. Hablemos un poco sobre las herramientas que están integradas en Deno. Así que te dije que hay herramientas integradas, y en realidad estás viendo una de ellas trabajando ahora mismo. Esta pequeña línea naranja ondulada, bajo la solicitud aquí, es en realidad el lint de Deno que dice que la solicitud nunca se usa. Si esto es intencional, prefixéalo con un guión bajo. Hay un linter que simplemente viene de serie, no es necesaria ninguna configuración. Y puedo ejecutar esto. El lint de Deno informa el mismo error. Puedo arreglarlo. Y en realidad ya has visto la otra herramienta que voy a demostrar, el formateador. Si voy y estropeo mi formato aquí y formato con Deno, formateado. No se necesita configuración. Y puedo hacer lo mismo usando la línea de comandos. Y si quiero ejecutar esto en CI, puedo tener una comprobación de formato de Deno que comprueba que estás formateado para fallar CI si no estás formateado. Todo simplemente viene de serie. No tengo tiempo para mostrar la prueba e invención, todo ese tipo de cosas ahora mismo. Pero sí, puedes mirar esos en el sitio web. Son muy fáciles de entender también.

Hay una cosa más realmente genial que creo que tenemos integrada, que es una database. Y puede que te estés preguntando, ¿por qué tienes una database integrada? Y esto es realmente parte de esa misma filosofía de que deberíamos tener todo lo que necesitas para desarrollar una aplicación simplemente integrado en el runtime. Así que la mayoría de la gente no quiere tener que pasar por y elegir qué database quieren. Simplemente quieren algo que funcione, que sea fácil de configurar, que no requiera configuración.

10. Deno.KV: Almacenamiento de Clave-Valor y Contador de Visitantes

Short description:

Deno.KV es un almacenamiento de clave-valor diseñado para aplicaciones sin servidor y para ejecutarse en el borde. Soporta colas de tareas, programación y vigilancia de claves. No se requiere configuración, instalación o importación. Puedes integrar fácilmente una base de datos KV abriéndola con Deno.OpenKV. Vamos a añadir un contador de visitantes incrementando una clave cada vez que se carga la página. Esta es una operación asíncrona, por lo que necesitamos esperarla. Finalmente, podemos recuperar el nuevo valor e imprimirlo.

Y Deno.KV es justo eso. Es un almacenamiento de clave-valor, cumple con ACID, por lo que tiene la misma consistencia que Postgres y otras bases de datos SQL. Está realmente diseñado para aplicaciones serverless, construido para ejecutarse en el borde, tiene soporte incorporado para colas de tareas y programación, trabajos cron si alguien está familiarizado con eso, tiene soporte para vigilancia de claves. En realidad dice que viene pronto, una versión un poco más antigua de esta diapositiva. ¿Lo lanzamos el jueves pasado? Oh, eso fue ayer. Sí. Lo lanzamos ayer. No se necesita configuración, instalación, ni importación. Puedes simplemente usarlo.

Así que vamos a integrar una pequeña base de datos KV aquí. Así que puedo Deno.OpenKV. Esto abre mi base de datos. Esto es todo lo que tengo que hacer, ¿verdad? Ahora tengo una base de datos. Y ahora puedo... Vamos a añadir un contador de visitantes. ¿Conoces esos sitios de principios de los 2000 que tenían un pequeño contador de visitantes en la parte inferior? Voy a añadir uno de esos, porque creo que son geniales. Así que vamos a tener una clave que llamaremos visitantes. Y vamos a incrementarla en uno cada vez que se cargue la página. Y esta es una operación asíncrona, por lo que necesitamos esperarla. Y entonces esto necesita ser una función asíncrona. Vamos a obtener el nuevo valor después de haberlo establecido. Así que esperamos kv.get. Vamos a obtener esa misma clave de visitantes que acabamos de establecer, e imprimir eso. Esa es la respuesta. Así que si pudiera escribir... Ya se está haciendo tarde. Vale. Entonces, Deno.Run. Main.Yes. ¡Oh! Y en realidad, esta es una característica inestable, así que necesito hacer esto.

11. Base de Datos Persistente, Monetización y Despliegue

Short description:

Los visitantes incrementan en uno en cada recarga. Deno es un proyecto de código abierto con monetización transparente. Deno Deploy es una plataforma de alojamiento para JavaScript sin servidor. Soporta proyectos Node, tiene una base de datos global y se despliega directamente desde GitHub. Deno ofrece una solución empresarial para ejecutar JavaScript en productos SaaS. Permite un fácil desarrollo local y un despliegue sin problemas a varias plataformas. DenoKV está respaldado por SQLite localmente y por FoundationDB cuando se despliega. DeployCTL es una herramienta para desplegar proyectos.

Y dónde está mi... Ahí vamos. Vale. Visitantes, uno. Soy el único visitante de esta página. ¿Raro, verdad? Y cada vez que recargo, incrementa en uno. Y si apago el servidor y lo vuelvo a iniciar, retoma donde lo dejó. Así que esta es una database realmente persistente. Esto no es algo en memoria.

Y lo que hace esto realmente genial es lo siguiente que quiero mostrarles, que es cómo nosotros ganamos dinero. Y pensarán, ¿por qué es esto relevante? Pero Deno es un proyecto de código abierto, y creo que es realmente importante ser muy transparente sobre cómo los proyectos de código abierto ganan dinero, porque de lo contrario pensarán que simplemente les estamos dando todas estas cosas geniales gratis, y en algún momento vamos a decir, hey, hey, en realidad a partir del próximo lunes, todos van a tener que pagarnos 10 dólares al mes, y de lo contrario no podrán usarlo más. Esa no es la forma en que queremos hacer las cosas. Así que todo lo que han visto hasta ahora es totalmente gratis, totalmente de código abierto. Licencia MIT en GitHub. Pueden contribuir a ello. Está escrito en Rust.

Pero proporcionamos una solución de alojamiento para Deno llamada Deno Deploy, que es una plataforma de alojamiento no solo para Deno, sino para todo JavaScript serverless. Puedes ejecutar proyectos Node allí también. Y funciona realmente bien para Deno, porque se ejecuta en el borde, algo similar a Cloud Flare Workers, pero tiene soporte incorporado para módulos Node, tiene esta base de datos global incorporada que les mostraré en un segundo corriendo por todo el mundo. Se despliega directamente desde GitHub, por lo que tienes una experiencia muy similar a cuando estás desplegando desde Vercel o Netlify o cualquiera de estos servicios donde estás extrayendo directamente desde GitHub. Ahora tenemos una oferta para clientes enterprise que quieren simplemente ejecutar algo de JavaScript como parte de su producto. Si alguno de ustedes está construyendo productos SaaS que utilizan webhooks, ¿por qué no simplemente dejan que los usuarios escriban algo de código directamente en su producto en lugar de tener que hacer un webhook hacia ellos? Así que sí, esto es parte de nuestra filosofía de que queremos facilitarles la construcción y prueba de sus proyectos localmente, y luego poder desplegarlos muy fácilmente a nuestra plataforma, o a Google Cloud Run, o Vercel, o Netlify, o realmente cualquier lugar, pero luego tenerlos respaldados por APIs mucho más distribuidas a nivel global. En el mismo runtime, mismas APIs, pero respaldadas por sistemas que están construidos para escalar en lugar de sistemas construidos para que ejecutes tus pruebas. Y un ejemplo de esto es esa base de datos DenoKV que les mostré antes, localmente, está respaldada por SQLite. Y cuando se despliega, en realidad está respaldada por FoundationDB, que es lo mismo que todos ustedes usan cuando usan sus iPhones todos los días, ¿verdad? Como, iCloud está respaldado por FoundationDB. Es una base de datos muy, muy escalable, distribuible a nivel global, muy robusta. Y me quedan como cero segundos, así que solo quería demostrar rápidamente cómo desplegar esto. Tenemos esta herramienta llamada DeployCTL que te permite desplegar un proyecto. Contemos aquí. 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13.

12. Configuración Rápida de Proyectos y Herramientas Integradas

Short description:

En cuestión de 20 minutos, he iniciado un nuevo proyecto desde cero con un formateador, un linter, una base de datos, dependencias NPM. Lo desplegamos en la nube y no utilizamos ninguna herramienta aparte de las que vienen de serie con Deno. Y hasta ahora hemos utilizado el 16% de las herramientas integradas en Deno. Las herramientas deberían venir de serie con todo lo que necesitas para construir un producto exitoso. Aumenta significativamente la diversión mientras programas. A nadie le gusta construir archivos de configuración.

Bueno, hay una URL. Si todos visitan esta URL en sus teléfonos ahora mismo, verán un contador de visitantes. ¿Hasta dónde podemos llegar? Yo soy el visitante número uno. ¿Alguien se atreve a ser el visitante número dos? Todavía número dos. Nadie ha ido allí todavía. Oh, alguien más ya ha ido allí. Vamos, gente. Necesitamos acelerar esto. Esto necesita ser uno de esos momentos de despegue. 44. Ahí vamos. De eso estoy hablando. Bueno, entonces, contadores de visitantes. Distribuidos globalmente, escalables, ¿verdad? Esto simplemente funciona. Y 13 segundos. No configuré nada aquí antes. Creé un proyecto, creé una database, y desplegué mi servicio todo en esos 13 segundos.

Así que un rápido resumen de lo que hemos hecho aquí. En cuestión de 20 minutos, he iniciado un nuevo proyecto desde cero con un formateador, un linter, una database, dependencias NPM. Así que quería probar algunos tests, benchmarking, generación de documentation, compilando un solo ejecutable. Lo desplegamos en la cloud y no utilizamos ninguna tooling aparte de la tooling que viene de serie con Deno. No tuve que escribir un solo archivo de configuración. Y hasta ahora hemos utilizado el 16% de las herramientas integradas en Deno, ¿verdad? Hay muchas cosas que te ofrecemos. Y eso es baterías incluidas. Y creo que esto es hacia donde realmente deberíamos ir con JavaScript. No solo en Deno, también en Node, también en otras herramientas. Las herramientas deberían venir de serie con todo lo que necesitas para construir un producto exitoso. Sí, aumenta significativamente la productivity, pero creo que mucho más importante, aumenta significativamente la diversión mientras programas, ¿verdad? A nadie le gusta construir archivos de configuración. Y si nunca tienes que construir archivos de configuración, puedes divertirte mucho más construyendo cosas que realmente te gustan. Un último plug.

13. Adopción de Deno y Compatibilidad con Node

Short description:

No hablé sobre JSX o React, pero quiero mencionar a Fresh, un marco de trabajo de front-end construido para Deno usando Preact. No requiere configuración, tiene soporte para TypeScript de serie y cero sobrecarga en tiempo de ejecución. Fresh también puede hacer renderizado del lado del servidor en el borde. Consulta Deno en deno.com/deploy y únete a nuestro Discord en discord.gg/deno. Hemos visto un crecimiento tremendo en el último año ya que nos enfocamos en la compatibilidad con Node y lo hicimos posible para ejecutar paquetes npm populares de serie.

No hablé en absoluto sobre JSX o React o algo así. Así que necesitaba mencionar un marco de trabajo de front-end para hacer esto relevante para esta masterclass. ¡Fresh! Fresh es un marco de trabajo de front-end construido para Deno usando Preact en lugar de React, pero todo es lo mismo de todos modos. Lo siento. No, no lo es. Lo sé. De nuevo, sin configuración, soporte TypeScript de serie, cero sobrecarga en runtime. Puede hacer renderizado del lado del servidor en el borde. Sí, Fresh.

Y sí, eso es todo. Una última cosa. Consulta Deno si quieres probar deno.deploy. Deno.com.deploy. Y si quieres unirte a nuestro Discord, discord.gg.deno. Y eso es todo lo que tengo. Tengo un montón de pegatinas, sin embargo, y necesito deshacerme de ellas. De lo contrario, mi persona de DevRel se enfadará conmigo. Así que por favor, recoge pegatinas a tu salida. Gracias.

Bueno, tengo un montón de preguntas, que tengo en mi mano. La primera cosa que tengo para ti es ¿por qué crees que es la razón de que Deno no ha sido adoptado tan ampliamente? Sí, esa es una gran pregunta. Así que creo que parte de ello es que cuando empezamos con Deno, realmente empezamos enfocándonos en todas las cosas que queríamos conseguir donde queríamos ser diferentes a Node. Y realmente no nos importaba mucho la compatibilidad porque sólo queríamos asegurarnos de que el objetivo final, el estado al que llegas es realmente bueno. Como necesitamos tener un buen formateador, buen linter, buena biblioteca de testing, buen runtime. Y luego, durante el último par, como el último año o así, pasamos mucho tiempo trabajando en la compatibilidad con Node. Así que como viste, pude ejecutar express de serie. Y no es sólo express. Puedo ejecutar muchos paquetes de npm simplemente de serie. Y esta compatibilidad hacia atrás es realmente necesaria para que la gente adopte algo a gran escala. Así que en el último año, hemos visto un crecimiento tremendo.

QnA

Personalización del Linter y Formateo

Short description:

Y creo que, sí, eso se acelerará. ¿Puedes personalizar el linter? Sí. No hay configuración del linter. Esto es de serie. Hay un archivo de configuración que puedes configurar si quieres tener una configuración. Pero realmente, tratamos de hacer que el predeterminado funcione bien para todos. ¿También puedes cambiar el formato? No, no puedes. Hay como cinco opciones en Prettier.

Y creo que, sí, eso se acelerará. Estoy seguro de que vas a oír más sobre Deno el próximo año y el año siguiente, y esperemos el año después de ese.

Bueno, una pregunta que en realidad se ha hecho muchas veces y tuve que eliminar todas las otras porque se ha hecho muchas veces es ¿puedes... Esa no es la pregunta. Soy muy bueno en esto. Vale, ahí vamos. ¿Puedes personalizar el linter? Sí. Si conociste a un desarrollador de JavaScript. Chicos, ¿por qué? No hay configuración del linter. Esto es de serie. Bueno, no, no. Estoy re-apoyando la configuración. Hay un archivo de configuración que puedes configurar si quieres tener una configuración. Pero realmente, tratamos de hacer que el predeterminado funcione bien para todos. Y este es el mismo camino que toman Go y Rust, donde hay un conjunto predeterminado de reglas que todos probablemente deberían usar porque son buenas bases. Puedes añadir a eso, o si hay una regla que realmente no te gusta, puedes desactivarla. Pero no personalices tus linters, gente. Sólo añade reglas. No elimines reglas.

Vale. ¿Por qué? Porque... Oh no, estás hablando de linting, pero el formateo. ¿También puedes... Oh, para el formateo. Lo siento. Sí, no lo sé. ¿Funciona con Angular? Hemos tenido demasiadas peleas sobre el formateo. ¿Por eso puedes cambiarlo? No, no puedes. No puedes cambiarlo. Hay como cinco opciones en Prettier.

Punto y coma y compatibilidad con Angular

Short description:

Por favor, todos usen punto y coma. Esa es mi única preocupación en este momento. Te decimos qué hacer y simplemente sigue adelante. ¿Estás trabajando en la compatibilidad con AngularJS? Creo que es genial ver más entornos de ejecución en el espacio que están intentando hacer algo. Node realmente necesitaba competencia. Cuando se anunció Deno, Node no tenía Fetch, y ahora Node tiene Fetch.

No deberías. Por favor, todos usen punto y coma. Honestamente, lo que me digas que haga, siempre que... Por ti me refiero a lo que Prettier me dice que haga, lo haré. Simplemente no me hagas hacerlo manualmente. Sí. Esa es mi única preocupación en este momento. Exactamente. Esa es la idea. Como, te decimos qué hacer y simplemente sigue adelante. Probablemente sea una buena idea. Probablemente esté bien. Nadie va a morir.

¿Funciona con Angular, sin embargo? ¿Pero estás trabajando en ello? ¿Estás trabajando en la compatibilidad con AngularJS? Estamos trabajando en toda la compatibilidad. Y estoy seguro de que Angular funcionará en algún momento. No sé si funciona ahora mismo. Nunca lo he probado. Esta fue una pregunta de broma. Realmente creo que Angular puede funcionar, pero tienes que probarlo tú mismo. Nadie quiere hacer eso. Creo que esto es muy... Esa fue una pregunta de broma. Bueno, no estoy de acuerdo. Pero estaba en la cima, así que tuve que... Es un sistema democrático y tuve que seguirlo. Bien, bien, bien.

¿Cuáles son tus pensamientos sobre Bun? Pensamientos sobre Bun. Creo que es genial ver más entornos de ejecución en el espacio que están intentando hacer algo. Node realmente necesitaba competencia. Cuando se anunció Deno, Node no tenía Fetch, y ahora Node tiene Fetch, y no quiero decir que fue todo culpa de Deno que Node ahora tenga Fetch, pero fue culpa de Deno que Node ahora tenga Fetch.

Ejecutando Doom en Deno

Short description:

Alguien preguntó si Deno puede ejecutar Doom, y la respuesta es sí. Ha habido casos de ejecución de una compilación WASM de Doom en Deno. Aunque no está claro si era específicamente Doom, es una opción popular. Sin embargo, es poco probable que se pueda ejecutar Skyrim en Deno.

Creo que otros entornos de ejecución empujando a todos los entornos en la dirección correcta es una buena idea. Estoy emocionado de verlo. Perdí la pregunta, pero alguien preguntaba si puede ejecutar Doom. ¿Puedes ejecutar Doom? Así que esto es realmente divertido. Estoy bastante seguro de que alguien ejecutó una compilación WASM de Doom en un marco de GPU web que alguien había construido con Deno. Así que puedes ejecutar Doom en Deno. Podría haber sucedido legítimamente. No recuerdo si era Doom u otro juego, pero creo que era Doom. Siempre es Doom. Probablemente sea Doom. Lo más probable es que sea Doom. No creo que puedas ejecutar Skyrim, sin embargo. No. No. Es poco probable.

Gestionando Dependencias en Deno

Short description:

Hubo una pregunta sobre cómo se gestionan los paquetes en Deno sin un archivo package.lock. En Deno, se genera un archivo de bloqueo cuando tienes un archivo Deno.json que especifica un mapa de importación. Este mapa de importación te permite reasignar tus especificadores a URLs o versiones específicas. El uso de mapas de importación es cómo gestionas las dependencias en Deno, y tener un archivo Deno.json también genera un archivo de bloqueo, que es importante utilizar.

También hubo una pregunta sobre TypeScript, y también sobre esto un poco. Es como ¿cómo se gestionan entonces los paquetes? Como no hay necesidad de package.lock o algo así, entonces... Sí. Así que en realidad una cosa que no mostré es que hay un archivo de bloqueo que se genera cuando... Así que el proyecto que mostré no tenía un archivo de configuración porque es un script de un solo archivo, ¿verdad? Este es el tipo de cosa que usas cuando quieres escribir algunas migraciones para tu base de datos, o simplemente quieres renombrar algunos archivos. Pero en un proyecto real, todavía tendrías un archivo Deno.json que especifica un mapa de importación. Y ese mapa es en realidad un estándar web que algunos de ustedes pueden conocer que te permite reasignar tus especificadores a URLs o versiones específicas. Y así es como gestionas las dependencias en Deno usando mapas de importación. Y si tienes ese archivo, en realidad también generará un archivo de bloqueo porque los archivos de bloqueo son importantes y deberías usarlos.

Mapas de Importación, Información de Deno, Compatibilidad con Next.js

Short description:

Puedes usar mapas de importación para especificar dependencias y tener una visión general de todas las dependencias utilizando el comando Deno info. Deno es compatible con Astro, y hay un adaptador de Astro disponible. Hubo algunos problemas con Next.js, pero se están solucionando y se espera su soporte en un futuro próximo. Si algo no funciona, no dudes en abrir problemas.

Oh, está bien. Entonces, si haces eso, también había un montón de preguntas sobre cómo no tienes que escribir cada vez el número de la dependencia. Puedes simplemente escribirlo allí una vez y luego por defecto, importarás ese que está en tu... Sí. Sí. Sí. Entonces, eso es como una cosa estándar de la web, ¿verdad? Esto no es algo específico para Deno, sino que es un mapa de importación estándar de la web. Así que incluso puedes usarlos en el navegador.

Oh, está bien. Genial. Eso también responde a esta pregunta, que es ¿cómo tienes una visión general de todas las dependencias que utiliza el proyecto? Sí. Y en realidad también hay un subcomando. Deno info te da un buen gráfico de todas tus dependencias.

Vale. La pregunta final es, ¿puedes usar Deno con algo como Next.js? Sí. O Astro. Así que Astro, definitivamente. Hay un adaptador de Astro para Deno y funciona bastante bien. Para Next.js, hubo como un problema que estuvimos solucionando la semana pasada. Creo que eso ya está solucionado. Quizás en la próxima versión, Next.js funcionará en el modo de desarrollo. Creo que la salida de la construcción ya funciona, pero había algo con el modo de desarrollo que no estaba funcionando. Pero probablemente pronto. Sí. Oh, pero la idea es soportarlo y probablemente va a ser en un plazo muy corto. Sí. Si algo no funciona, siempre es un error. Así que no dudes en abrir problemas si las cosas no funcionan.

Vale, perfecto. Muchas gracias. Nos hemos quedado sin tiempo, pero Luca estará en el mismo lugar con las otras preguntas y respuestas, donde estaban los otros ponentes. Así que no dudes en hacerle cualquier pregunta que tengas. Y sí, muchas gracias. Por favor, toma tus pegatinas. Yo ya cogí tres. Fantástico. Gracias por invitarme.

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

Node.js Compatibility in Deno
Node Congress 2022Node Congress 2022
34 min
Node.js Compatibility in Deno
Can Deno run apps and libraries authored for Node.js? What are the tradeoffs? How does it work? What’s next?
Deno 2.0
Node Congress 2023Node Congress 2023
36 min
Deno 2.0
Top Content
Deno 2.0 is imminent and it's bringing some big changes to the JavaScript runtime. In this talk, we'll introduce the new features including import maps, package.json auto-discovery, and bare specifiers. We'll discuss how these improvements will help address issues like duplicate dependencies and disappearing dependencies. Additionally, we'll delve into the built-in support for deno: specifiers on the deno.land/x registry and its role in providing a recommended path for publishing. Come learn about how these updates will shape the future of the JavaScript ecosystem and improve backwards compatibility with Node applications.
Bun, Deno, Node.js? Recreating a JavaScript runtime from Scratch - Understand magic behind Node.js
Node Congress 2023Node Congress 2023
29 min
Bun, Deno, Node.js? Recreating a JavaScript runtime from Scratch - Understand magic behind Node.js
Bun, Deno, and many other JavaScript runtimes have been hyped, but do you know why? Is it that easy to make a runtime from scratch?

I've been researching the secret behind Node.js' power and why there are so many new JavaScript runtimes coming up. Breaking down each key component used on Node.js I've come to interesting conclusions that many people used to say whereas in practice it works a bit differently.

In this talk, attendees will learn the concepts used to create a new JavaScript runtime. They're going to go through an example of how to make a JavaScript runtime by following what's behind the scenes on the Node.js project using C++. They'll learn the relationship between Chrome's V8 and Libuv and what makes one JavaScript runtime better than others.

This talk will cover the following topics:
- What's a JavaScript Engine - V8
- Why Node.js uses Libuv
- How to create a JS Runtime from scratch
Writing universal modules for Deno, Node, and the browser
TypeScript Congress 2022TypeScript Congress 2022
25 min
Writing universal modules for Deno, Node, and the browser
This talk will walk you through writing a module in TypeScript that can be consumed by users of Deno, Node, and browsers. I will walk through how to set up formatting, linting, and testing in Deno, and then how to publish your module to deno.land/x and npm. I will also start out with a quick introduction on what Deno is.
Fresh: a new full stack web framework for Deno
Node Congress 2023Node Congress 2023
24 min
Fresh: a new full stack web framework for Deno
Fresh is a web framework based on Deno and Web standards built to run on the edge
Experimenting with Deno for Easier Kubernetes Deployments
DevOps.js Conf 2022DevOps.js Conf 2022
31 min
Experimenting with Deno for Easier Kubernetes Deployments
As we all know, dealing with Kubernetes YAML is not very intuitive (especially for those just getting starting) and the more resources and dependencies are added the messier and more complex the process becomes. In this talk, we'll explore how we can use Typescript and Deno to bring typing, composition, code-reuse, and testing as an alternative to YAML - that doesn't include these capabilities, all while still remaining declarative and easy to use.

Workshops on related topic

Building a Hyper Fast Web Server with Deno
JSNation Live 2021JSNation Live 2021
156 min
Building a Hyper Fast Web Server with Deno
WorkshopFree
Matt Landers
Will Johnston
2 authors
Deno 1.9 introduced a new web server API that takes advantage of Hyper, a fast and correct HTTP implementation for Rust. Using this API instead of the std/http implementation increases performance and provides support for HTTP2. In this workshop, learn how to create a web server utilizing Hyper under the hood and boost the performance for your web apps.
Writing Universal Modules for Deno, Node and the Browser
Node Congress 2022Node Congress 2022
57 min
Writing Universal Modules for Deno, Node and the Browser
Workshop
Luca Casonato
Luca Casonato
This workshop will walk you through writing a module in TypeScript that can be consumed users of Deno, Node and the browsers. I will explain how to set up formatting, linting and testing in Deno, and then how to publish your module to deno.land/x and npm. We’ll start out with a quick introduction to what Deno is.