Compatibilidad con Node.js en Deno

Rate this content
Bookmark
Slides

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

FAQ

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.

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.

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.

QnA

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
¿Sabes qué está pasando realmente en tu carpeta node_modules? Los ataques a la cadena de suministro de software han explotado en los últimos 12 meses y solo están acelerándose en 2022 y más allá. Profundizaremos en ejemplos de recientes ataques a la cadena de suministro y qué pasos concretos puedes tomar para proteger a tu equipo de esta amenaza emergente.
Puedes consultar las diapositivas de la charla de Feross aquí.
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
Puedes revisar las diapositivas de la charla de James aquí.
ESM Loaders: Mejorando la carga de módulos en Node.js
JSNation 2023JSNation 2023
22 min
ESM Loaders: Mejorando la carga de módulos en Node.js
El soporte nativo de ESM para Node.js fue una oportunidad para el proyecto de Node.js de lanzar soporte oficial para mejorar la experiencia de carga de módulos, permitiendo casos de uso como la transpilación sobre la marcha, la sustitución de módulos, el soporte para cargar módulos desde HTTP y la monitorización.
Aunque CommonJS tiene soporte para todo esto, nunca fue oficialmente compatible y se hacía mediante hackeo del código de ejecución de Node.js. ESM ha solucionado todo esto. Analizaremos la arquitectura de la carga de ESM en Node.js y discutiremos la API del cargador que lo admite. También veremos características avanzadas como la concatenación de cargadores y la ejecución fuera de hilo.
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
El transpilador JSX incorporado de Bun, las recargas en caliente en el servidor, el punning de propiedades JSX, la API de macros, las instalaciones automáticas de paquetes, el soporte de console.log JSX, el renderizado en el servidor 4 veces más rápido y más hacen de Bun el mejor entorno de ejecución para construir aplicaciones React
Diagnostics de Node.js listos para usar
Node Congress 2022Node Congress 2022
34 min
Diagnostics de Node.js listos para usar
En los primeros años de Node.js, los diagnósticos y la depuración eran puntos problemáticos considerables. Las versiones modernas de Node han mejorado considerablemente en estas áreas. Características como seguimiento de pila asíncrono, capturas de montón y perfilado de CPU ya no requieren módulos de terceros o modificaciones en el código fuente de la aplicación. Esta charla explora las diversas características de diagnóstico que se han incorporado recientemente a Node.
Puedes consultar las diapositivas de la charla de Colin aquí. 
Javascript Debería Venir Con Baterías
React Day Berlin 2023React Day Berlin 2023
30 min
Javascript Debería Venir Con Baterías
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.

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
Construye y Despliega un Backend con Fastify y Platformatic
JSNation 2023JSNation 2023
104 min
Construye y Despliega un Backend con Fastify y Platformatic
WorkshopFree
Matteo Collina
Matteo Collina
Platformatic te permite desarrollar rápidamente APIs GraphQL y REST con un esfuerzo mínimo. La mejor parte es que también te permite aprovechar todo el potencial de Node.js y Fastify cuando lo necesites. Puedes personalizar completamente una aplicación de Platformatic escribiendo tus propias características y complementos adicionales. En el masterclass, cubriremos tanto nuestros módulos de código abierto 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 este masterclass aprenderás cómo desarrollar APIs con Fastify y desplegarlas en la nube de Platformatic.
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
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
WorkshopFree
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.
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.