Se ha publicado la versión 2.0 de la plataforma Deno, diseñada para la ejecución aislada de aplicaciones del servidor en los lenguajes JavaScript y TypeScript utilizando el motor V8, empleado en navegadores basados en Chromium. El proyecto Deno es desarrollado por Ryan Dahl, el creador de Node.js, con el objetivo de proporcionar un entorno más seguro y corregir errores conceptuales en la arquitectura de Node.js. Para aumentar la seguridad, el envoltorio alrededor del motor V8 está escrito en el lenguaje Rust, y para el manejo de solicitudes en modo no bloqueante se utiliza la plataforma Tokio. El código del proyecto se distribuye bajo la licencia MIT. Las compilaciones están disponibles para Linux, Windows y macOS.
Al preparar esta nueva rama, se prestó especial atención a la compatibilidad con la antigua infraestructura de JavaScript y a la ampliación del espectro de proyectos de JavaScript soportados sin comprometer la seguridad. Entre los cambios se encuentran:
- Se ha implementado la compatibilidad hacia atrás con Node.js y npm, permitiendo ejecutar aplicaciones no modificadas creadas para Node.js. El soporte para Node.js también permite migrar gradualmente proyectos existentes de Node.js a Deno o conectar dependencias de NPM en proyectos Deno especificando el prefijo «npm:» al importar paquetes en deno.json.
- Se ha añadido soporte incorporado para archivos package.json y carpetas de módulos node_modules que se utilizan en Node.js.
- Se ha proporcionado soporte para repositorios NPM privados, definidos a través de archivos «.npmrc».
- Se ha añadido soporte para populares frameworks de JavaScript como Next.js, Astro, Remix, Angular, SvelteKit y QwikCity.
- Se ha añadido soporte para espacios de trabajo npm (workspace) y monorepositorios (monorepo) con un manejo separado de dependencias.
- Se han añadido nuevos comandos de gestión de paquetes: «deno install» para instalar dependencias, «deno add» para añadir paquetes a package.json o deno.json, «deno remove» para eliminar paquetes. Se destaca que «deno install» es aproximadamente un 15% más rápido que npm cuando no hay paquetes en caché y un 90% más rápido cuando hay paquetes en caché (se admite tanto node_modules como su propia caché global).
- Se ha estabilizado la biblioteca estándar.
- Se ha garantizado un largo ciclo de soporte (LTS).
- Se ha presentado JSR, un repositorio con bibliotecas de JavaScript y TypeScript que pueden ser utilizadas en diversos entornos de ejecución de JavaScript.
- En el comando «deno fmt» se ha incorporado la posibilidad de formatear contenido en formatos HTML, CSS y YAML.
- Se ha añadido soporte para reglas y correcciones específicas de Node.js en el comando «deno lint».
- El comando «deno test» ahora permite ejecutar pruebas creadas con node:test.
- El comando «deno task» incluye soporte para ejecutar scripts a través de package.json.
- En el comando «deno compile» se ha añadido la opción de firmar digitalmente el código.
- El comando «deno serve» permite la paralelización de las operaciones de los servidores HTTP utilizando múltiples núcleos de CPU.
- El comando «deno coverage» ahora admite guardar informes en formato HTML.
- Se ha optimizado el rendimiento.

Características principales de Deno:
- Orientación hacia la seguridad en la configuración predeterminada. Los accesos a archivos, las capacidades de red y el acceso a variables de entorno están bloqueados por defecto y requieren habilitación explícita. Las aplicaciones, por defecto, se ejecutan en entornos de sandbox aislados y no pueden acceder a las capacidades del sistema sin la concesión de permisos explícitos;
- Soporte integrado para el lenguaje TypeScript además de JavaScript. Para la verificación de tipos y la generación de JavaScript se utiliza el compilador TypeScript nativo, lo que ocasiona una pérdida de rendimiento en comparación con el análisis de JavaScript en V8;
- El tiempo de ejecución se entrega como un solo archivo ejecutable autónomo («deno»). Para ejecutar aplicaciones mediante Deno, solo es necesario descargar un archivo ejecutable de aproximadamente 40 MB para su plataforma, que no tiene dependencias externas ni requiere una instalación especial en el sistema. Además, Deno no es una aplicación monolítica, sino una colección de paquetes crate en Rust (deno_core, rusty_v8), que pueden usarse por separado.
- Al ejecutar el programa, así como para cargar módulos, se pueden utilizar direcciones a través de URL. Por ejemplo, para ejecutar el programa welcome.js se puede usar el comando «deno https://deno.land/std/examples/welcome.js». El código de recursos externos se descarga y se almacena en la caché del sistema local, pero nunca se actualiza automáticamente (para actualizar, se requiere iniciar explícitamente la aplicación con la bandera «--reload»);
- Procesamiento eficiente de solicitudes HTTP en aplicaciones, la plataforma está diseñada para crear aplicaciones web de alto rendimiento;
- Posibilidad de crear aplicaciones web universales que pueden ejecutarse tanto en Deno como en un navegador web convencional;
- Existe un conjunto estándar de módulos cuyo uso no requiere vinculación a dependencias externas. Los módulos de la colección estándar han pasado por una auditoría adicional y pruebas de compatibilidad;
- Además del runtime, la plataforma Deno también actúa como un gestor de paquetes y permite referirse a los módulos dentro del código mediante URL. Por ejemplo, para cargar un módulo, se puede especificar en el código «import * as log from «https://deno.land/std/log/mod.ts». Los archivos cargados desde URL externos, servidores se almacenan en caché. La vinculación a las versiones de los módulos se determina a través de la especificación de los números de versión dentro de la URL, por ejemplo, «https://unpkg.com/liltest@0.0.5/dist/liltest.js»;
- Enfoque en el uso de estándares web, con soporte para Promise, fetch y módulos de ECMAScript.
- Compatibilidad con paquetes alojados en el repositorio NPM y diseñados para la plataforma Node.js.
- Se ha integrado un sistema de inspección de dependencias (comando «deno info») y una herramienta para formatear el código (deno fmt);
- Todos los scripts de la aplicación pueden ser combinados en un solo archivo JavaScript.
Fuente: opennet.ru

