En la plataforma Deno de JavaScript se asegura la compatibilidad con los módulos de NPM

Se ha lanzado Deno 1.28, una plataforma para la ejecución aislada de aplicaciones en los lenguajes JavaScript y TypeScript, que puede ser utilizada para crear controladores que funcionen en el servidor. La plataforma es desarrollada por Ryan Dahl, el creador de Node.js. Al igual que en Node.js, Deno utiliza el motor JavaScript V8, que también se aplica en navegadores basados en Chromium. Sin embargo, Deno no es una ramificación de Node.js, sino un proyecto completamente nuevo creado desde cero. El código del proyecto se distribuye bajo la licencia MIT. Las compilaciones están preparadas para Linux, Windows y macOS.

El proyecto Deno fue creado para proporcionar a los usuarios un entorno más seguro y eliminar los errores conceptuales cometidos en la arquitectura de Node.js. Para aumentar la seguridad, el envoltorio alrededor del motor V8 está escrito en el lenguaje Rust, lo que permite evitar muchas vulnerabilidades que surgen debido al trabajo a bajo nivel con la memoria. Para manejar solicitudes en modo no bloqueante se utiliza la plataforma Tokio, también escrita en Rust. Tokio permite crear aplicaciones de alto rendimiento basadas en una arquitectura orientada a eventos, soportando multihilo y el procesamiento asíncrono de solicitudes de red.

El cambio clave en la nueva versión es la estabilización de la compatibilidad con los paquetes alojados en el repositorio NPM, lo que permite utilizar en Deno más de 1.3 millones de módulos creados para la plataforma Node.js. Por ejemplo, en aplicaciones basadas en Deno ahora se pueden utilizar módulos como Prisma, Mongoose y MySQL para organizar un acceso permanente a los datos, así como frameworks que facilitan el trabajo en frontend, como React y Vue. Algunos módulos de NPM todavía son incompatibles con Deno, por ejemplo, debido a dependencias de elementos del entorno específicos de Node.js, como el archivo package.json. También actualmente no es posible utilizar el comando “deno compile” con módulos de NPM. En futuras versiones se espera abordar estas incompatibilidades y limitaciones.

El soporte para el modelo anterior utilizado en Deno, basado en el sistema de módulos ECMAScript y la API web, se mantiene al mismo nivel, y para la importación de módulos NPM se utiliza el esquema de carga basado en URL, habitual en Deno. Para acceder a los módulos NPM, se ha previsto un prefijo de URL especial 'npm:', que se puede utilizar de manera análoga a los módulos normales de Deno. Por ejemplo, para importar un módulo NPM se puede especificar 'import { chalk } from "npm:chalk@5";', y para ejecutar un script NPM desde la línea de comandos, se usaría 'deno run --allow-env --allow-read npm:create-vite-extra'.

El uso de paquetes NPM en Deno es significativamente más sencillo que en Node.js, ya que no hay necesidad de instalar módulos previamente (los módulos se instalan en el primer lanzamiento de la aplicación), no se utiliza el archivo package.json, y tampoco se usa por defecto el directorio node_modules (los módulos se almacenan en un directorio común, aunque existe la opción de volver al comportamiento anterior utilizando la opción '--node-modules-dir').

En las aplicaciones basadas en NPM se mantiene la posibilidad de utilizar los mecanismos de control de acceso, aislamiento y activación de capacidades de seguridad extendidas que Deno proporciona. Para prevenir ataques a través de dependencias sospechosas, Deno bloquea de manera predeterminada todos los intentos de acceso al sistema por parte de las dependencias y emite una advertencia sobre problemas detectados. Por ejemplo, al intentar que un módulo acceda a la escritura en /usr/bin/, se mostrará un aviso pidiendo confirmación de esta operación: deno run npm:install-malware ⚠️ ┌ Deno solicita acceso de escritura a /usr/bin/. ├ Solicitado por 'install-malware' ├ Ejecute nuevamente con --allow-write para omitir este aviso. └ ¿Permitir? [y/n] (y = sí, permitir; n = no, denegar) >

Entre las mejoras no relacionadas con NPM en la nueva versión se menciona la actualización del motor V8 a la versión 10.9, la detección automática de archivos bloqueados, la estabilización de la API Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() y Deno.uid(), y la adición de una nueva API inestable Deno.Command() para ejecutar comandos (un reemplazo universal para Deno.spawn, Deno.spawnSync y Deno.spawnChild).

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 runtime se entrega en forma de un solo archivo ejecutable autónomo («deno»). Para ejecutar aplicaciones con Deno, basta con descargar el archivo ejecutable correspondiente a su plataforma, que tiene un tamaño de aproximadamente 30 MB, sin dependencias externas y sin requerir 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 utilizarse 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»;
  • 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

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster