Se ha publicado la plataforma Node.js 23.0 con soporte inicial para el lenguaje TypeScript

Se lanzó Node.js 23.0.0, una plataforma para ejecutar aplicaciones de red en JavaScript. Node.js 23.0 está clasificado como una rama intermedia, que tendrá soporte durante 7 meses (hasta junio de 2025). En los próximos días se completará la estabilización de la rama Node.js 22, que recibirá el estado LTS el 29 de octubre y será compatible hasta abril de 2027. El soporte para ramas LTS anteriores de Node.js 20.x y 18.x continuará hasta abril de 2026 y 2025, respectivamente.

Principales mejoras:

  • Se agregó soporte experimental para TypeScript, que permite definiciones de tipos explícitas. El soporte se habilita mediante las opciones "--experimental-strip-types" y "--experimental-transform-types". En el caso de la primera opción, trabajar con TypeScript se reduce a borrar las definiciones de tipos específicas del lenguaje (no se realiza la verificación de tipos, el código simplemente se convierte a JavaScript sin tipo). La segunda opción convierte algunos elementos de sintaxis de TypeScript, como enumeraciones y espacios de nombres, en código JavaScript.
  • De forma predeterminada está habilitada la capacidad de utilizar la llamada “require()” para cargar módulos JavaScript ESM (módulos ECMAScript) en modo síncrono. Los módulos ESM se utilizan en navegadores y reemplazan los módulos CommonJS específicos de Node.js. Para cargar mediante "require()" en Node.js, el módulo ESM debe ejecutarse de forma sincrónica (sin espera en el nivel superior).
  • Se proporciona detección automática de módulos ESM en archivos sin o con la extensión “.js”. Anteriormente, dichos archivos se trataban como módulos CommonJS a menos que su tipo se especificara explícitamente en el archivo package.json ubicado en el mismo directorio (“tipo”: “módulo”). En la nueva versión, para los archivos cuyo tipo no está especificado en package.json, primero intenta cargar como un módulo CommonJS y, si esto falla, entonces como un módulo ESM.
  • Implementación experimental agregada compatible con navegadores La API de Almacenamiento Web está diseñada para el almacenamiento persistente (clase localStorage) o temporal (clase sessionStorage) de datos de clave-valor. Para habilitar la compatibilidad con Almacenamiento Web, es necesario ejecutar la API con el indicador "--experimental-webstorage" y especificar la ruta al archivo de almacenamiento con el indicador "--localstorage-file".
  • Se agregó una API SQLite experimental para trabajar con bases de datos utilizando el lenguaje de consulta SQL y almacenamiento basado en la biblioteca SQLite. Además de almacenar la base de datos en un archivo en el disco, también se puede colocar en la memoria especificando “:memoria:” en lugar del nombre del archivo. La API de almacenamiento web antes mencionada también se implementa sobre SQLite, lo que resulta en la adición de SQLite como una dependencia para Node.js.
  • El comando “node —run” ha sido declarado estable y está diseñado para ejecutar scripts definidos en el archivo package.json.
  • Se implementó soporte opcional para almacenar en caché el código compilado en el disco para acelerar significativamente el inicio de los módulos. El almacenamiento en caché se habilita a través de la variable de entorno NODE_COMPILE_CACHE. En términos de su propósito, la característica se parece al paquete v8-compile-cache, pero se diferencia en un mayor rendimiento y soporte para módulos ESM.
  • El objeto Buffer se ha optimizado para aumentar significativamente el rendimiento de los métodos Buffer.copy() y Buffer.write().
  • Se ha mejorado el rendimiento del módulo node:fs, lo que también reduce la cantidad de llamadas al código C++ durante la operación.
  • El motor V8 ha sido actualizado a la versión 12.9, utilizada en Chromium 129.
  • Se ha eliminado la compatibilidad con sistemas Windows de 32 bits.
  • Debido a la introducción de características definidas en el estándar C++8 en Node.js y el motor V20, se han aumentado los requisitos para la versión del compilador GCC. La creación de Node.js ahora requiere al menos GCC 12.

La plataforma Node.js puede utilizarse tanto para el soporte de aplicaciones web del lado del servidor como para la creación de programas de red estándar del lado del cliente y del servidor. Para ampliar la funcionalidad de las aplicaciones Node.js, se ha preparado una amplia colección de módulos, incluyendo aquellos que implementan... servidores y clientes de HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, módulos para integración con diversos frameworks web, manejadores WebSocket y Ajax, conectores a DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motores de plantillas, motores CSS, implementaciones de algoritmos criptográficos y sistemas de autorización (OAuth), parsers XML.

Para manejar una gran cantidad de solicitudes paralelas, Node.js utiliza un modelo de ejecución de código asincrónico basado en el procesamiento de eventos sin bloqueo y la definición de controladores de devolución de llamada. Los métodos admitidos para multiplexar conexiones incluyen epoll, kqueue, /dev/poll y select. Para la multiplexación de conexiones se utiliza la biblioteca libuv, que es un complemento de libev en sistemas Unix y de IOCP en Windows. La biblioteca libeio se utiliza para crear un grupo de subprocesos y c-ares está integrado para realizar consultas DNS en modo sin bloqueo. Todas las llamadas al sistema que causan el bloqueo se ejecutan dentro del grupo de subprocesos y luego, como manejadores de señales, pasan el resultado de su trabajo a través de una tubería sin nombre.

La ejecución del código JavaScript está garantizada mediante el uso del motor V8 desarrollado por Google (además, Microsoft está desarrollando una versión de Node.js con el motor Chakra-Core). En esencia, Node.js es similar a los marcos Perl AnyEvent, Ruby Event Machine, Python Twisted y la implementación de eventos en Tcl, pero el bucle de eventos en Node.js está oculto para el desarrollador y se asemeja al procesamiento de eventos en una aplicación web. ejecutándose en el navegador.

Fuente: opennet.ru

Añadir un comentario