Compatibilidad con Node.js en Deno

This ad is not shown to multipass and full ticket holders
JSNation US
JSNation US 2025
November 17 - 20, 2025
New York, US & Online
See JS stars in the US biggest planetarium
Learn More
In partnership with Focus Reactive
Upcoming event
JSNation US 2025
JSNation US 2025
November 17 - 20, 2025. New York, US & Online
Learn more
Bookmark
Slides
Rate this content

¿Puede Deno ejecutar aplicaciones y bibliotecas creadas para Node.js? ¿Cuáles son los compromisos? ¿Cómo funciona? ¿Qué sigue?

This talk has been presented at Node Congress 2022, check out the latest edition of this JavaScript Conference.

FAQ

Sí, Deno puede ejecutar aplicaciones, bibliotecas y paquetes diseñados para Node.js utilizando una bandera de compatibilidad. Sin embargo, no todos los paquetes son compatibles actualmente, y algunos elementos como las APIs de Node.js que dependen de CommonJS pueden requerir configuraciones adicionales.

Deno ofrece 'ejecución segura por defecto', lo que significa que los programas no pueden acceder a recursos del sistema como el sistema de archivos o la red a menos que se otorguen permisos explícitos. Además, Deno permite especificar permisos más detallados, como limitar la lectura del sistema de archivos a directorios específicos o restringir las conexiones de red a ciertos dominios.

Deno permite importar cualquier código de terceros utilizando URLs directamente, similar a los navegadores. No utiliza un sistema de módulos basado en Node.js o CommonJS, sino que se adhiere a los módulos ES, lo que simplifica la resolución de módulos y la compatibilidad con la web.

Los desafíos incluyen la adaptación de ciertas APIs de Node.js que no son compatibles de manera directa con Deno, como las relacionadas con el manejo de temporizadores y las diferencias en la gestión de módulos (CJS frente a ESM). Además, hay un trabajo en curso para adaptar o proporcionar polyfills para módulos integrados de Node.js como TLS o ChildProcess.

Deno planea lanzar una primera versión de una capa de compatibilidad con Node.js, explorando una integración más profunda que podría incluir soporte de API de Node.js sin necesidad de modos de ejecución especiales o banderas adicionales. Además, se está trabajando en facilitar la instalación de paquetes desde npm de manera transparente.

No directamente, ya que los complementos nativos de Node.js se basan en C++, y Deno está escrito en Rust. Sin embargo, Deno está investigando integraciones como NAPI y una API de FFI para permitir cierto grado de interoperabilidad con código nativo.

DenoSTD es la biblioteca estándar de Deno, una colección de módulos escritos en TypeScript que están garantizados para funcionar con Deno. Incluye polyfills y adaptaciones necesarias para facilitar la compatibilidad con Node.js y otros entornos de ejecución.

Deno es un entorno de ejecución de línea de comandos para JavaScript y TypeScript, similar a Node.js. La principal diferencia es que Deno admite TypeScript como ciudadano de primera clase y utiliza un único ejecutable para ejecutar programas. Deno enfatiza la seguridad, limitando el acceso al sistema de archivos, variables de entorno y conexiones de internet, a menos que se permitan explícitamente.

Bartek Iwanczuk
Bartek Iwanczuk
34 min
17 Feb, 2022

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Deno tiene como objetivo proporcionar compatibilidad con Node.js para facilitar la migración. Si bien Deno puede ejecutar aplicaciones y bibliotecas ofrecidas para Node.js, aún no se admiten todas. Hay compromisos a considerar, como APIs incompatibles y una experiencia de desarrollo menos ideal. Deno está trabajando en mejorar la compatibilidad y el proceso de transición. Los esfuerzos incluyen la portabilidad de módulos de Node.js, explorar un enfoque de superset y la instalación transparente de paquetes desde npm.
Available in English: Node.js Compatibility in Deno

1. Introducción a la compatibilidad de Deno y Node.js

Short description:

¡Hola, amigos! Mi nombre es Bartek y soy miembro del equipo principal de Deno. Hoy vamos a hablar sobre la compatibilidad de Node.js en Deno. ¿Puede Deno ejecutar aplicaciones y bibliotecas ofrecidas para Node.js? ¿Cuáles son los compromisos? ¿Cómo funciona todo y qué sigue en nuestro plan?

¡Hola, amigos! Mi nombre es Bartek y soy miembro del equipo principal de Deno. Hoy vamos a hablar sobre la compatibilidad de Node.js en Deno. En esta charla, me gustaría darles una breve descripción de qué es Deno, y tratar de responder algunas preguntas sobre la compatibilidad con Node.

Entonces, ¿puede Deno ejecutar aplicaciones y bibliotecas ofrecidas para Node.js? ¿Cuáles son los compromisos? ¿Cómo funciona todo y qué sigue en nuestro plan? ¡Así que empecemos!

Deno uno a uno. Deno es una nueva runtime de línea de comandos para JavaScript y para TypeScript. Es similar a Node.js, que puedes ejecutar tu código JavaScript, pero la diferencia es que también admitimos TypeScript como ciudadano de primera clase. Una palabra de precaución aquí, Deno en realidad no ejecuta tu TypeScript. Solo lo transpila a JavaScript por debajo, detrás de escena, por lo que no necesitas configurar una cadena de compilación ni nada por el estilo. Deno también tiene como objetivo ser divertido y productivo. Nos gusta pensar en ello como una bolsa de bloques de LEGO.

2. Ejecución de Deno y compatibilidad con Node.js

Short description:

Deno es un archivo ejecutable único que funciona en Linux, Mac y Windows. Ofrece una ejecución segura por defecto, evitando el acceso no autorizado a sistemas de archivos y conexiones a internet. Deno permite enlazar código de terceros utilizando URLs y recupera, almacena en caché, compila o transpila el código de forma transparente. Aunque Deno no es inicialmente compatible con npm, algunos usuarios encuentran la falta de soporte de npm como un obstáculo para su adopción.

Deno es un archivo ejecutable único. Este archivo es todo lo que necesitas para ejecutar cualquier programa de Deno, y siempre distribuiremos Deno de esta manera. Deno funciona en Linux, funciona en Mac y en Windows, así que dondequiera que vayas, un nuevo servidor, un nuevo portátil, lo que sea, solo necesitas ejecutar un comando para obtener Deno y estar listo para comenzar.

Deno tiene algo que nos gusta llamar ejecución segura por defecto. Lo que significa es que ninguno de tus programas puede acceder a tu sistema de archivos, tus variables de entorno, procesos patrocinadores, o incluso abrir una conexión a internet a menos que lo permitas explícitamente. En este breve ejemplo también podemos ver que puedes enlazar directamente a código de terceros y ejecutarlo incluso si no confías en este código. Así que aquí estamos ejecutando un ejemplo de DenoSTD, que es la biblioteca estándar de Deno, es un conjunto de módulos que están garantizados para funcionar con Deno, pero podría haber sido cualquier URL en el mundo que puedas imaginar, y en este caso, donde no se proporcionan banderas además de los subcomandos de ejecución, este programa no puede hacer nada en tu computadora. Pero si quieres acceder a un sistema de archivos o generar un subproceso o abrir una conexión a internet, puedes darle a Deno algunas banderas y decirle que permita que tu programa realmente haga estas cosas. Y como puedes ver aquí, algunas de estas banderas te permiten limitar aún más esto. Por ejemplo, podemos permitir que nuestro programa lea desde el sistema de archivos, pero solo desde el directorio slash tmp. O podemos decirle a tu programa que permita abrir una conexión a internet, pero solo limitada al dominio google.com.

Deno te permite enlazar cualquier código de terceros utilizando URLs. Funciona de la misma manera que en el navegador. En este ejemplo podemos ver nuestra importación de módulo ES. Estamos importando una función magenta, nuevamente de Deno STD. Esta vez lo estamos haciendo desde el módulo fmt slash colors. Por lo tanto, esta resolución de módulo es simple y compatible con los navegadores y Deno no tiene noción de módulos de node o indexJS. O en realidad, de eso se trata esta charla después de todo. Deno no depende de un servidor centralizado. Es decir, no estás explícitamente vinculado solo a npm si quieres enlazar tus paquetes o instalar nuevos paquetes o un registro privado si tienes uno. Puedes obtener código desde cualquier lugar en internet, ya sea servidores públicos o servidores privados si proporcionas cabeceras de autorización adecuadas. Deno como un runtime recupera, almacena en caché y compila este código, o lo transpila, de forma transparente en la primera ejecución. Después de la primera ejecución, el código ya está en caché, por lo que no es necesario descargarlo nuevamente. De hecho, Deno no volverá a descargar el código a menos que se lo pidas explícitamente.

Entonces, ¿por qué estamos pensando o trabajando en la compatibilidad con Node.js? Bueno, npm es posiblemente el ecosistema de paquetes más grande del mundo, y los usuarios simplemente quieren usar este ecosistema de paquetes. Cuando Deno salió por primera vez con la versión 1.0, afirmamos explícitamente que no somos compatibles con npm. Y eso estaba bien. Aquí, algunos usuarios todavía encuentran la falta de soporte para npm como un gran obstáculo para su adopción. Entonces, algunos usuarios quieren probar Deno en lugar de Node.js. Sin embargo, el costo de cambiar de un runtime a otro a menudo resulta demasiado alto para siquiera intentarlo.

3. Compatibilidad entre Deno y Node.js

Short description:

Al proporcionar compatibilidad con Node.js, Deno tiene como objetivo facilitar y suavizar el proceso de migración para los usuarios. Deno puede ejecutar aplicaciones, bibliotecas y paquetes ofrecidos para Node.js, pero aún no se admiten todos. Los esfuerzos se centran en permitir a los usuarios ejecutar los paquetes y herramientas más populares. Deno está trabajando en la adaptación o provisión de polyfills para algunos módulos integrados de Node.js y asegurando la integración de CJS y ESM.

Entonces, al proporcionar compatibilidad con Node.js, queremos facilitar y suavizar el proceso de migración para los usuarios. Intentemos responder a esta pregunta. ¿Puede Deno realmente ejecutar aplicaciones, bibliotecas o paquetes que fueron escritos para Node.js? Y sí, pero... Y antes de llegar a este pero, las imágenes hablan más que mil palabras.

Así que voy a darte un ejemplo rápido, o en realidad dos ejemplos de código ofrecido para Node.js que ya se está ejecutando en Deno. En el primer ejemplo, podemos ver la herramienta muy popular llamada ESlint que se está ejecutando directamente en Deno. Así que obtuvimos las fuentes de ESlint. Por el bien de este ejemplo, digamos que ya usamos npm. Y ahora estamos ejecutando este código usando Deno. Lo importante a tener en cuenta aquí es que estamos proporcionando esta bandera "compat", que le indica a Deno que realmente proporcione esta compatibilidad con Node.js. Y luego pasamos "unstable", que actualmente es necesario debido a algunas limitaciones en la API. Por lo tanto, algunas de las APIs aún no están definidas y pueden cambiar en el futuro. Y esta bandera transmite el mensaje de que, sabes, esto es inestable, así que algo podría cambiar, pero no te preocupes, estará bien.

El segundo ejemplo es en realidad npm en sí mismo. Ya podemos ejecutar npm en Deno y usarlo para instalar otros paquetes. Una cosa que puedes notar aquí es que hay algunas indicaciones que dicen "no implementado". Por ejemplo, process.onCodeException o process.onUnhandledRejection. Llegaremos a eso en un momento. Entonces sí, Deno puede ejecutar aplicaciones, bibliotecas y paquetes ofrecidos para Node.js. Sin embargo, aún no se admiten todos ellos. Estamos enfocando nuestros esfuerzos en permitir a los usuarios ejecutar los paquetes y herramientas más populares en este momento. Ya vimos ESLint y npm, pero también estamos haciendo grandes avances para hacer que Yarn funcione, Vite, Next.js, que probablemente sea el framework más popular en este momento, y Mocha, que también es uno de los frameworks de testing más populares en este momento. Entonces sí, Deno puede ejecutar código ofrecido para Node.js, pero no todo.

La razón es que todavía estamos trabajando en la adaptación o provisión de polyfills para algunos de los módulos integrados de Node.js, como TLS o ChildProcess. Se está trabajando en ellos, sin embargo, su API es muy extensa, por lo que puedes crear subprocesos tal como lo harías en Node con Deno, sin embargo, no todas las APIs funcionarán en el momento. Otra cosa importante es la integración de CJS y ESM. Deno desde el primer día fue ESM primero. Y no entendían los módulos de CommonJS. Sin embargo, debido a que mucho código ofrecido para Node.js todavía utiliza CommonJS, es crucial proporcionar esta integración o interoperabilidad entre los dos formatos. Y por cierto, esto es algo que Node.js ya admite de forma nativa, así que solo estamos tratando de ponernos al día.

4. Trade-offs and Developer Experience

Short description:

Aunque podemos ejecutar código de Node.js en Deno, hay compensaciones a considerar. Algunas APIs no son compatibles, como setTimeout, que devuelve tipos diferentes en Node.js, navegadores y Deno. La experiencia del desarrollador no es ideal, ya que requiere pasar múltiples banderas a Deno. Sin embargo, se están haciendo esfuerzos para mejorar esto y hacer que la transición entre Node.js y Deno sea más fluida. Pasar banderas como ____ compat configura variables globales como process, y ____ allow read es necesario para los módulos CommonJS.

Aunque estamos ejecutando código ofrecido para Node.js, este código aún está sujeto a las mismas reglas de permisos o banderas de allow que vimos al principio de la presentación. Eso significa que puedes ejecutar código ofrecido para Node.js en Deno y obtener un beneficio adicional de poder aislar tus programas en ciertos directorios o dominios de Internet o evitar que generen subprocesos.

Entonces, ¿cuáles son las compensaciones de esta compatibilidad? Bueno, algunas APIs que existen en Node.js y en Deno y en navegadores, simplemente no son compatibles. Un buen ejemplo es setTimeout. Esta es una API global. Está disponible en Node.js, está disponible en navegadores, está disponible en Deno. En Node.js, también puedes importarlo desde el módulo Timers. Sin embargo, la diferencia es que en Node.js, cuando llamas a setTimeout, obtendrás una instancia de la clase TimeoutClass. Sin embargo, en navegadores y en Deno, obtendrás un número, que es un identificador para este Timeout. En Node.js, debido a este tipo de retorno, muchos paquetes dependen de él para, por ejemplo, cancelar el temporizador. Es decir, decirle a Node.js que si este Timeout es lo último que se ejecuta o no esperas nada más, simplemente no esperes a este Timeout y terminemos de ejecutar ahora mismo. De manera similar, en navegadores y en Deno, hay mucho código que depende del hecho de que es posible que desees hacer una comprobación de tipo basada en este valor de retorno. Hay mucho código que hace typeof ID igual a número. Este es un problema realmente difícil. Llevamos tres meses pensando en ello. Si alguien del equipo técnico de Node está escuchando esta charla, por favor comuníquense y veamos cómo podemos avanzar para que esto sea más compatible entre los entornos.

Otra compensación es que la experiencia del desarrollador no es tan buena. Pero en este momento, estamos trabajando en ello, estamos progresando y estamos pensando en cómo hacer que esto sea más agradable para que los usuarios cambien entre Node.js y Deno de manera transparente. ¿Y por qué esta DX no es tan buena? Entonces, necesitas pasar muchas banderas a Deno para decirle que se comporte como Node.js. Necesitas pasar ____ compat. Esta bandera configura variables globales como process. Process es una variable global que está disponible en el entorno de Node.js. Sin embargo, no está disponible en Deno de forma predeterminada. Pero si pasas esta ____ compat, le dirá a Deno que prepare esta variable global para ti. Necesitas pasar ____ hands table. Una vez más, algunas de las APIs aún no están completas y pasarán por algunos cambios o un proceso de evaluación. Esto es solo para señalar a los usuarios que, sabes, puede haber algunos problemas aquí y allá, pero está bien. Nos estamos moviendo rápido. La mayoría de las veces, también necesitas pasar ____ allow read, y esto es necesario para los módulos CJS, para CommonJS, porque la resolución de CommonJS depende en gran medida de sondear el sistema de archivos y los directorios de módulos de Node. Y dado que está implementado al 100% en el espacio de usuario en este momento, está sujeto a comprobaciones de permisos de Deno.

5. Compatibilidad con Node.js y Planes Futuros

Short description:

Algunas APIs podrían no ser compatibles en el futuro y los complementos nativos en Node.js no serán compatibles en Deno debido a la estabilidad de la ABI. La mayoría de las APIs de Node.js se polyfillan en el espacio de usuario utilizando el proyecto DinoSTD. Sin embargo, algunas APIs intrincadas no se pueden polyfillar y requieren soporte directo en el núcleo de Deno. Los próximos pasos para la compatibilidad con Node.js en Deno incluyen lanzar la primera versión de la capa de compatibilidad, explorar un enfoque de superset e instalar paquetes de forma transparente desde npm.

Otra compensación es que algunas APIs podrían no ser compatibles en el futuro. Por lo tanto, un módulo Inspector o un módulo V8 podrían no llegar a Deno en absoluto. Todavía estamos discutiendo esto. Es tanto un problema técnico como, de hecho, si queremos admitir estas APIs, es porque consideramos que algunas de ellas son cuestionables.

Una advertencia bastante importante es que los complementos nativos no serán compatibles. Los complementos nativos en Node.js dependen de Node.JPG y básicamente son escritos en C++, mientras que Deno está escrito en Rust. Por lo tanto, no es tan fácil conciliar este problema debido a la estabilidad de la ABI. Sin embargo, podría tener una buena respuesta a este problema en las próximas diapositivas.

Entonces, antes de llegar a eso, hablemos brevemente de cómo funciona todo. Es posible que te sorprenda, pero la mayoría de estas APIs provenientes de Node.js se polyfillan en el espacio de usuario. Una vez más, voy a referirme a este proyecto llamado DinoSTD, que es una biblioteca estándar que enviamos con Dino. Es una colección de módulos ofrecidos en TypeScript que están garantizados para funcionar con Dino. Y allí tenemos este módulo Node, y este módulo Node contiene muchos archivos que básicamente polyfillan todas las APIs disponibles en varios módulos integrados de Node.js. Te animo a que vayas a este enlace y lo compruebes por ti mismo. Puede resultarte muy educativo.

Un problema con esto es que el código del tiempo de ejecución que proporciona los módulos integrados y Node.js se ofrece como módulos CommonJS, mientras que todo este código en DinoSTD es en realidad módulos ES. Por lo tanto, no solo tuvimos que reescribir la mayor parte del código a TypeScript y hacerlo seguro en cuanto a tipos, sino que también tuvimos que hacer una reorganización bastante significativa para que el código funcione debido a las diferentes semánticas de CommonJS y los módulos ES.

Está bien y es genial que pudiéramos hacer esto en el espacio de usuario. Sin embargo, hay algunas APIs muy intrincadas que no son realmente posibles de hacer en el espacio de usuario. Y dos ejemplos serían process.unhandledRejection, un controlador de eventos que se activa cuando hay una promesa que es rechazada pero no tiene un controlador de captura. En Deno hasta este punto, esto siempre fue un fallo grave, tu programa se cerraría. De manera similar, process.nextTick te permite programar una devolución de llamada que se llamará después del siguiente tick del bucle de eventos. Intentamos polyfillar estas APIs en el espacio de usuario. Sin embargo, debido a las estrictas semánticas de dónde deben ser llamadas o cuándo o qué debería suceder, lo cual altera cómo se comporta Deno, no pudimos hacer esto simplemente en el espacio de usuario. Por lo tanto, tuvimos que agregar soporte directo para estas APIs en el núcleo de Deno.

Entonces, ¿qué sigue para la compatibilidad con Node.js en Deno? Bueno, queremos lanzar la primera versión, la primera versión disponible públicamente de esta capa de compatibilidad en el segundo trimestre de este año. Y algunas de las cosas que nos gustaría hacer es, en primer lugar, explorar un enfoque llamado superset donde Deno básicamente admita las APIs de Node.js de forma predeterminada sin necesidad de banderas especiales o modos de ejecución diferentes a los que Deno se ejecutaría. Por lo tanto, es posible que en el futuro no sea necesario utilizar la bandera --compat. Otra idea que estamos explorando es la instalación de paquetes desde npm de forma transparente.

6. Fetching Code from npm and NAPI Integration

Short description:

Estamos trabajando en obtener código directamente de npm, eliminando la necesidad de npm install. Se está desarrollando la integración de NAPI para cerrar la brecha entre Deno y Node.js en términos de extensiones binarias de tiempo de ejecución. Tu opinión es crucial. Prueba dino run --compat y avísanos si encuentras algún problema. Se agradecen las contribuciones a varios proyectos en Deno.

manejado de forma transparente. De manera similar a cómo Deno obtiene, almacena en caché y transpila código que descubre desde URLs, nos gustaría proporcionar una funcionalidad similar para obtener código directamente de npm. Por lo tanto, no necesitarías hacer npm install antes de ejecutar tu código. Simplemente podrías ejecutarlo con Deno y Deno se encargaría de verificar si faltan algunos paquetes y los obtendría de npm. Y volviendo a los complementos nativos, en realidad estamos avanzando mucho en la integración de NAPI y estamos muy seguros de que podríamos proporcionar esta integración para al menos cerrar la brecha entre los dos tiempos de ejecución en términos de extensiones binarias de tiempo de ejecución. Tu opinión sobre esta capa de compatibilidad es extremadamente importante y sería muy, muy útil para nuestros esfuerzos y para determinar qué deberíamos priorizar primero. Por lo tanto, te animo mucho a que pruebes dino run dash dash compat y nos digas qué opinas. Si tienes algún problema al ejecutar algunos de los paquetes que utilizas o si todo funciona sin problemas, por favor, pruébalo y avísanos. Y por último, si alguna vez has querido contribuir a Open Source, dino siempre agradece todas las contribuciones. Tenemos más de 600 colaboradores. Tenemos decenas de proyectos diferentes, que abarcan desde proyectos REST, que son partes muy básicas de su tiempo de ejecución, hasta funcionalidades de nivel superior como el análisis de AST, formateadores, linters, empaquetadores, proyectos escritos en TypeScript, JavaScript, e incluso proyectos completamente de front-end que no tocan el backend en absoluto. Así que sí, por favor, ve a esta URL y mira si hay algo que te interese y, nuevamente, todas las contribuciones son extremadamente

QnA

Conclusion and Node.js Compatibility

Short description:

Hemos cubierto mucho terreno en esta charla. Si tienes alguna pregunta, no dudes en contactarnos por correo electrónico o visitar nuestro sitio web en dino.lab. Gracias por recibirme. Discutamos los resultados de la encuesta. Next.js es la opción más popular y estamos trabajando activamente en agregar soporte para Next.js. Es interesante ver los comentarios de los asistentes. Ahora, abordemos una pregunta sobre por qué usar Dino en lugar de Node.js. Dino proporciona una herramienta completa junto con el tiempo de ejecución, lo que facilita el inicio de nuevos proyectos. Está listo para producción y ya es utilizado por muchas empresas. El enfoque en la compatibilidad con Node.js se debe a la importancia del ecosistema de NPM.

Bienvenidos a Dino y apreciamos a todos. Correcto, fui bastante rápido, teníamos mucho terreno que cubrir, pero espero que hayas encontrado esta charla interesante. Si tienes alguna pregunta, no dudes en enviarme un correo electrónico a esta dirección de correo electrónico, y este es nuestro sitio web en dino.lab. Gracias por recibirme aquí. Y nos vemos pronto. Gracias. Hola. Gracias por recibirme aquí. Sí, gracias por esta gran charla. Veamos tu encuesta, ¿cuál conocimiento de paquetes te gustaría ejecutar en Dino? Así que tenemos next, por favor, next JS, webpack remix mocha parcel en ese orden next.js está ganando con un 34%. ¿Qué opinas de esto? Para ser honesto, no me sorprende mucho. Y tengo buenas noticias para todos los que votaron por Next.js, estamos trabajando activamente en obtener soporte para Next.js y esperamos que llegue en unas pocas semanas. De hecho, estoy un poco sorprendido de que Next.js sea el segundo y webpack el tercero. Pero bueno, es genial recibir comentarios de nuestros asistentes. Y esto nos ayudará enormemente en nuestros esfuerzos por una mejor compatibilidad con Node. Sí, pensé que webpack sería más popular. Pero sí, esos son los resultados. Ok, la pregunta es, Christina pregunta, ¿por qué usar Dino en lugar de node.js? ¿No está listo para producción? Correcto. Una de las mayores ventajas de Dino es que no solo te proporcionamos un tiempo de ejecución que puede ejecutar JavaScript, sino también JavaScript y TypeScript, sino que también te proporcionamos una herramienta completa. Así que si estás comenzando un nuevo proyecto, no tienes que preocuparte por configurar un formateador, linter, ejecutor de pruebas, bundler, generador de documentación, todo esto ya está configurado para ti. Y te lo enviamos en un solo ejecutable. Así que puedes tener tu proyecto con integración continua adecuada y pruebas en cuestión de minutos. Así que no más discusiones sobre qué ejecutor de pruebas vamos a usar esta vez. Y cuáles son los ajustes de prettier que queremos aplicar. Todo esto está hecho por ti y está listo para usar tan pronto como descargues Dino. ¿Y Dino está listo para producción? Sí, definitivamente. Usamos Dino intensivamente en nuestra empresa Dino Land y lo usamos mucho para múltiples propósitos, pero también hay muchas empresas que ya utilizan Dino en producción, puedes ver esta lista yendo al wiki de nuestro repositorio Dino Land Dino. Gracias. Y tú estás preguntando, ¿por qué intentas hacer la compatibilidad con node.js en Dino? ¿No debería ser un esfuerzo del desarrollador adaptar el código para Dino? Correcto. ¿Por qué lo estamos haciendo? Bueno, la respuesta es simple. NPM es la biblioteca de paquetes más grande del mundo.

Colaborando en Deno y Compatibilidad

Short description:

Deno es más grande que las gemas de Ruby o PyPy de Python. Los usuarios han proporcionado comentarios de que les encantaría usar Deno, pero la incapacidad de utilizar bibliotecas de NPM es una desventaja. Para abordar esto, estamos trabajando en una herramienta llamada dnt que permite ofrecer código para Deno primero y luego publicarlo de forma transparente en NPM. Esto permite dirigirse tanto a Deno como a Node.js utilizando una única base de código. Además, proporcionar una compatibilidad de primera clase es más fácil y confiable que la conversión automática, ya que muchos proyectos de código de Node.js dependen de API basadas en callbacks. Los desarrolladores de todos los niveles de habilidad son bienvenidos a colaborar en Deno, con varios repositorios y proyectos disponibles en JavaScript, TypeScript y Rust. ¡Visita nuestro servidor de Discord para participar!

Es más grande que las gemas de Ruby o PyPy de Python. Y muchos usuarios nos han proporcionado comentarios de que les encantaría usar Deno, pero como no pueden utilizar bibliotecas de NPM, no es una razón tan convincente. Por eso estamos trabajando en esto. Pero para responder a la segunda parte de la pregunta, ¿deberías trabajar en código o escribir especialmente para Deno? Bueno, eso depende de ti. Pero puedo sugerirte que revises dnt, que es otro proyecto de la compañía Deno. Es una herramienta que te permite ofrecer el código para Deno primero, pero luego se configurará de forma transparente para ser publicado en NPM. Así que puedes apuntar tanto a Deno como a Node utilizando una única base de código de Deno. Y nuevamente, como estamos enviando una cadena de herramientas completa, es posible que encuentres más fácil configurar y mantener tu proyecto en lugar de depender de múltiples dependencias de NPM para el formateo, linting, etc.

De acuerdo, gracias. Sí, eso tiene mucho sentido. ¿Qué tal hacer un convertidor en lugar de hacer compatibilidad? Sí, exploramos esta opción. Sin embargo, suena más fácil de lo que realmente es. Muchos proyectos de código que están escritos para Node todavía dependen de la API basada en callbacks. Y parte de ese flujo de código, en este caso, no es tan obvio, y convertirlo automáticamente sería propenso a errores en extremo en comparación con proporcionar una compatibilidad de primera clase. En lugar de intentar hacer conversiones y luego tratar de corregir errores, lo cual probablemente tendrías que hacer por tu cuenta, parece más fácil y más seguro proporcionar estas API que ya están disponibles en Node. Y nos aseguraremos de que funcionen de la misma manera en Deno. Gracias.

¿Qué nivel crees que debería tener un desarrollador para colaborar en Deno? Lo siento, ¿puedes repetir la pregunta, por favor? ¿En qué nivel crees que debería estar un desarrollador para colaborar en Deno? Supongo que la persona está tratando de preguntar si debería ser senior o junior. No sé, tal vez eso. ¿En qué nivel para colaborar en Deno? Lo siento, ¿codificar en Deno o contribuir a Deno? Para colaborar. Colaborar, claro. Bueno, todos son bienvenidos. Tenemos decenas de repositorios diferentes y abarcan múltiples proyectos porque Deno no es una única cosa. En realidad, está compuesto por diferentes bloques que son proyectos de Rust, JavaScript o TypeScript. Así que todos pueden encontrar algo a lo que puedan contribuir, sin importar su nivel de habilidad. Si te sientes cómodo en JavaScript, tenemos proyectos que solo usan JavaScript. Si prefieres TypeScript, tenemos este gran proyecto llamado Deno STD, que es una biblioteca estándar a la que puedes contribuir y ayudarnos con la compatibilidad con Node o proporcionar un nuevo módulo. O si prefieres Rust, puedes ayudarnos con el propio Deno o alguna de las herramientas porque todas las herramientas como el formateador y el linter, etc., están escritas en Rust. Así que únete a nuestro servidor de Discord y estoy seguro de que podemos orientarte en la dirección correcta según tus intereses y tu confianza en cualquiera de estos lenguajes. No, gracias.

Herramientas para Escribir Pruebas en Deno

Short description:

Deno proporciona una utilidad incorporada para escribir pruebas robustas y amigables con los informes. La función Deno.test te permite registrar pruebas, ya sean pruebas unitarias o pruebas de integración. El ejecutor de pruebas de Deno ejecuta archivos de prueba y reporta cualquier error sin afectar el ámbito global ni agregar nuevas APIs. Proporciona ayudantes para prevenir fugas de memoria y limpiar recursos. El ejecutor de pruebas incorporado de Deno es robusto, fácil de usar y vale la pena explorar.

¿Existen herramientas para escribir pruebas robustas y amigables con los informes en Deno? Esa es una pregunta de Ivan. ¿Para probar qué, lo siento? ¿Existen herramientas para escribir pruebas robustas y amigables con los informes en Deno? Bueno, diría que lo que proporcionamos en Deno mismo, la utilidad incorporada es lo suficientemente robusta. Tenemos una API simple, una única función Deno.test que puedes usar para registrar una prueba. Y no importa si es una prueba unitaria o una prueba de integración, tenemos un montón de ayudantes como aserciones para trabajar con subprocesos.

Puedes probar cualquier cosa que desees. Y lo genial del ejecutor de pruebas de Deno es que no es mágico. Hace exactamente lo que se supone que debe hacer. Ejecuta este archivo de prueba y reporta cualquier error. No afecta el ámbito global como a veces lo hace Jest. No agrega nuevas APIs. Es exactamente lo mismo que ejecutar solo tu programa con la única diferencia de que tienes esta API Deno.test disponible para ti. Y de hecho, proporcionamos algunos ayudantes que se aseguran de que tu código no tenga fugas de memoria o que limpies después de terminar con algunos recursos como archivos del sistema de archivos o sockets de red. Así que definitivamente revisa el ejecutor de pruebas incorporado de Deno. Creo que lo encontrarás lo suficientemente robusto y lo suficientemente simple como para aprenderlo en cuestión de minutos. Gracias.

Compatibilidad con Paquetes de NPM y Complementos Nativos

Short description:

Nuestro objetivo es lograr un 80-90% de compatibilidad con los paquetes existentes de NPM en Deno. Sin embargo, los paquetes que dependen de complementos nativos representan un desafío, ya que en su mayoría están escritos en C++. Estamos explorando la integración de API y considerando la adición de Wasm para admitir la ejecución de código nativo tanto en Deno como en Node.js.

¿Podremos ejecutar todos los paquetes existentes de NPM en Deno? No, desafortunadamente no. Estamos apuntando a una compatibilidad del 80 al 90%. Hay un problema con algunos paquetes que, por ejemplo, dependen de los complementos nativos que no podremos admitir realmente porque los complementos ofrecidos para Node.js están en su mayoría escritos en C++ y no tenemos una forma de proporcionar una API compatible. Sin embargo, si usas una API, creemos que podríamos tener una respuesta para eso y de hecho, estamos en la etapa de prototipo de proporcionar una integración de API que agregaría Wasm y proporcionaría dos formas diferentes de ejecutar código nativo, tanto en Deno como en Node.js. Gracias. ¿Puede Deno ejecutar complementos nativos? Sí, una de las formas es Wasm si lo consideras lo suficientemente nativo. Otra forma es esta integración de NAPI en la que estamos trabajando. Y la tercera forma es que en realidad tenemos una capa de FFI o interfaz de funciones externas. Entonces, puedes llamar a cualquier código que use la convención de llamada en C. Entonces, si tienes una biblioteca existente en C++ o algo hecho en Rust o Zig o básicamente cualquier cosa que use la convención de llamada en C, puedes usarlo desde Deno. Y esto es algo bastante nuevo. Decidimos reemplazar las extensiones nativas solo en Rust con algo que esté disponible para usar desde muchos lenguajes diferentes. Y de hecho, estamos viendo algunos desarrollos emocionantes en este espacio, como ejecutar el intérprete de Python directamente desde Deno utilizando esta API de FFI. Así que revisa esta API. Puede resultar muy poderosa e interesante. Y, por supuesto, esperamos tus comentarios si algo de esto no se adapta a tu caso de uso. Sí, gracias. Y la última pregunta que tenemos para hoy es, ¿Deno admitirá una API? Sí, ya respondí esto varias veces. No está definido que definitivamente lo haremos, pero tenemos un prototipo funcionando. Podemos ejecutar varios módulos de Parcel que usan una API y algunos otros módulos como Dprint o Xutter, y esto utiliza una API. Así que tenemos bastante confianza en que podremos proporcionar esta integración. Todavía estamos discutiendo cómo encaja esto en el modelo de permisos de Deno, etc. Pero sí, definitivamente es posible y estén atentos a las noticias al respecto en las próximas semanas y meses. Gracias. Muchas gracias. Esto fue muy, muy interesante. Y quiero invitar a todos a spatial chat a la sala especial de Bart. Así que muchas gracias y nos vemos allí. Adiós. Gracias.

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

Es una jungla ahí fuera: ¿Qué está pasando realmente dentro de tu carpeta Node_Modules?
Node Congress 2022Node Congress 2022
26 min
Es una jungla ahí fuera: ¿Qué está pasando realmente dentro de tu carpeta Node_Modules?
Top Content
The talk discusses the importance of supply chain security in the open source ecosystem, highlighting the risks of relying on open source code without proper code review. It explores the trend of supply chain attacks and the need for a new approach to detect and block malicious dependencies. The talk also introduces Socket, a tool that assesses the security of packages and provides automation and analysis to protect against malware and supply chain attacks. It emphasizes the need to prioritize security in software development and offers insights into potential solutions such as realms and Deno's command line flags.
Cargadores ESM: Mejorando la carga de módulos en Node.js
JSNation 2023JSNation 2023
22 min
Cargadores ESM: Mejorando la carga de módulos en Node.js
Top Content
ESM Loaders enhance module loading in Node.js by resolving URLs and reading files from the disk. Module loaders can override modules and change how they are found. Enhancing the loading phase involves loading directly from HTTP and loading TypeScript code without building it. The loader in the module URL handles URL resolution and uses fetch to fetch the source code. Loaders can be chained together to load from different sources, transform source code, and resolve URLs differently. The future of module loading enhancements is promising and simple to use.
Hacia una Biblioteca Estándar para Runtimes de JavaScript
Node Congress 2022Node Congress 2022
34 min
Hacia una Biblioteca Estándar para Runtimes de JavaScript
Top Content
There is a need for a standard library of APIs for JavaScript runtimes, as there are currently multiple ways to perform fundamental tasks like base64 encoding. JavaScript runtimes have historically lacked a standard library, causing friction and difficulty for developers. The idea of a small core has both benefits and drawbacks, with some runtimes abusing it to limit innovation. There is a misalignment between Node and web browsers in terms of functionality and API standards. The proposal is to involve browser developers in conversations about API standardization and to create a common standard library for JavaScript runtimes.
Cómo Bun hace que la construcción de aplicaciones React sea más simple y rápida
React Day Berlin 2022React Day Berlin 2022
9 min
Cómo Bun hace que la construcción de aplicaciones React sea más simple y rápida
BUN is a modern all-in-one JavaScript runtime environment that achieves new levels of performance. It includes BUN dev, a fast front-end dev server, BUN install, a speedy package manager, and BUN run, a fast package runner. BUN supports JSX, has optimized React server-side rendering, and offers hot module reloading on the server. The priorities for BUN include stability, node compatibility, documentation improvement, missing features in BUN install, AST plugin API, native Windows support, Bundler and Minifier optimization, and easier deployment to production. BUN's AST plugin API allows for bundle-time JavaScript execution and embedding code, potentially inspiring new frameworks.
Diagnostics de Node.js listos para usar
Node Congress 2022Node Congress 2022
34 min
Diagnostics de Node.js listos para usar
This talk covers various techniques for getting diagnostics information out of Node.js, including debugging with environment variables, handling warnings and deprecations, tracing uncaught exceptions and process exit, using the v8 inspector and dev tools, and generating diagnostic reports. The speaker also mentions areas for improvement in Node.js diagnostics and provides resources for learning and contributing. Additionally, the responsibilities of the Technical Steering Committee in the TS community are discussed.
El Estado de Node.js 2025
JSNation 2025JSNation 2025
30 min
El Estado de Node.js 2025
The speaker covers a wide range of topics related to Node.js, including its resilience, popularity, and significance in the tech ecosystem. They discuss Node.js version support, organization activity, development updates, enhancements, and security updates. Node.js relies heavily on volunteers for governance and contribution. The speaker introduces an application server for Node.js enabling PHP integration. Insights are shared on Node.js downloads, infrastructure challenges, software maintenance, and the importance of update schedules for security.

Workshops on related topic

Masterclass de Node.js
Node Congress 2023Node Congress 2023
109 min
Masterclass de Node.js
Top Content
Workshop
Matteo Collina
Matteo Collina
¿Alguna vez has tenido dificultades para diseñar y estructurar tus aplicaciones Node.js? Construir aplicaciones que estén bien organizadas, sean probables y extensibles no siempre es fácil. A menudo puede resultar ser mucho más complicado de lo que esperas. En este evento en vivo, Matteo te mostrará cómo construye aplicaciones Node.js desde cero. Aprenderás cómo aborda el diseño de aplicaciones y las filosofías que aplica para crear aplicaciones modulares, mantenibles y efectivas.

Nivel: intermedio
Construir y Desplegar un Backend Con Fastify & Platformatic
JSNation 2023JSNation 2023
104 min
Construir y Desplegar un Backend Con Fastify & Platformatic
Top Content
WorkshopFree
Matteo Collina
Matteo Collina
Platformatic te permite desarrollar rápidamente GraphQL y REST APIs con un esfuerzo mínimo. La mejor parte es que también te permite desatar todo el potencial de Node.js y Fastify siempre que lo necesites. Puedes personalizar completamente una aplicación de Platformatic escribiendo tus propias características y plugins adicionales. En la masterclass, cubriremos tanto nuestros módulos de Open Source como nuestra oferta en la Nube:- Platformatic OSS (open-source software) — Herramientas y bibliotecas para construir rápidamente aplicaciones robustas con Node.js (https://oss.platformatic.dev/).- Platformatic Cloud (actualmente en beta) — Nuestra plataforma de alojamiento que incluye características como aplicaciones de vista previa, métricas integradas e integración con tu flujo de Git (https://platformatic.dev/). 
En esta masterclass aprenderás cómo desarrollar APIs con Fastify y desplegarlas en la Platformatic Cloud.
Construyendo un Servidor Web Hiper Rápido con Deno
JSNation Live 2021JSNation Live 2021
156 min
Construyendo un Servidor Web Hiper Rápido con Deno
Workshop
Matt Landers
Will Johnston
2 authors
Deno 1.9 introdujo una nueva API de servidor web que aprovecha Hyper, una implementación rápida y correcta de HTTP para Rust. El uso de esta API en lugar de la implementación std/http aumenta el rendimiento y proporciona soporte para HTTP2. En este masterclass, aprende cómo crear un servidor web utilizando Hyper en el fondo y mejorar el rendimiento de tus aplicaciones web.
0 a Auth en una Hora Usando NodeJS SDK
Node Congress 2023Node Congress 2023
63 min
0 a Auth en una Hora Usando NodeJS SDK
WorkshopFree
Asaf Shen
Asaf Shen
La autenticación sin contraseña puede parecer compleja, pero es fácil de agregar a cualquier aplicación utilizando la herramienta adecuada.
Mejoraremos una aplicación JS de pila completa (backend de Node.JS + frontend de React) para autenticar usuarios con OAuth (inicio de sesión social) y contraseñas de un solo uso (correo electrónico), incluyendo:- Autenticación de usuario - Administrar interacciones de usuario, devolver JWT de sesión / actualización- Gestión y validación de sesiones - Almacenar la sesión para solicitudes de cliente posteriores, validar / actualizar sesiones
Al final del masterclass, también tocaremos otro enfoque para la autenticación de código utilizando Flujos Descope en el frontend (flujos de arrastrar y soltar), manteniendo solo la validación de sesión en el backend. Con esto, también mostraremos lo fácil que es habilitar la biometría y otros métodos de autenticación sin contraseña.
Tabla de contenidos- Una breve introducción a los conceptos básicos de autenticación- Codificación- Por qué importa la autenticación sin contraseña
Requisitos previos- IDE de tu elección- Node 18 o superior
Construye aplicaciones peer-to-peer con Pear Runtime
JSNation 2024JSNation 2024
152 min
Construye aplicaciones peer-to-peer con Pear Runtime
WorkshopFree
David Mark Clements
David Mark Clements
Aprende cómo construir rápidamente aplicaciones peer-to-peer con Pear Runtime. No se requieren servidores. Comprende los paradigmas peer-to-peer y construye aplicaciones a partir de bloques de construcción bien definidos. En este masterclass se cubrirá cómo crear aplicaciones de escritorio y terminales (con discusión para móviles) que funcionan completamente peer-to-peer desde cualquier lugar del mundo. Al final de este masterclass, deberías saber cómo construir un nuevo tipo de aplicación altamente escalable con costos infraestructurales reducidos (~0) junto con arquitecturas adecuadas y mejores prácticas para aplicaciones peer-to-peer. Del creador de Pear Runtime y la compañía que nos trae keet.io. Tabla de contenido:- Introducción a Pear- Preguntas y respuestas iniciales- Configuración- Creación de una aplicación de escritorio Pear- Compartir una aplicación Pear- Ejecutar una aplicación Pear- Creación de una aplicación terminal Pear- Lanzamiento de una aplicación Pear- Discusiones arquitecturales- Preguntas y respuestas finales
GraphQL: De Cero a Héroe en 3 horas
React Summit 2022React Summit 2022
164 min
GraphQL: De Cero a Héroe en 3 horas
Workshop
Pawel Sawicki
Pawel Sawicki
Cómo construir una aplicación GraphQL fullstack (Postgres + NestJs + React) en el menor tiempo posible.
Todos los comienzos son difíciles. Incluso más difícil que elegir la tecnología es desarrollar una arquitectura adecuada. Especialmente cuando se trata de GraphQL.
En este masterclass, obtendrás una variedad de mejores prácticas que normalmente tendrías que trabajar en varios proyectos, todo en solo tres horas.
Siempre has querido participar en un hackathon para poner algo en funcionamiento en el menor tiempo posible, entonces participa activamente en este masterclass y únete a los procesos de pensamiento del instructor.