escrito en frente
Node.js 20 se lanzó el 18 de abril de 2023 y entrará en soporte a largo plazo (también conocido como versión LTS) en octubre de 2023. Podemos descargarlo y experimentarlo aquí: https://nodejs.org/en/download/current/
En Node.js 20, hay muchos cambios nuevos y aspectos destacados, incluido el nuevo modelo de permisos de Node.js, la import.meta.resolve
versión síncrona y estable test_runner
, el motor V8 actualizado a la versión 11.3, etc.
mejora del rendimiento
Node.js 20 ha optimizado mucho el rendimiento durante el tiempo de ejecución, principalmente incluyendo URL
módulos, fetch()
funciones y EventTarget
módulos.
La sobrecarga de inicialización EventTarget
se reduce a la mitad y se puede acceder más rápidamente a todos los subsistemas que dependen de este módulo.
Además, V8 Fast API
(una API para funciones C de llamadas rápidas, consulte aquí para obtener más detalles ) también se utiliza para mejorar el rendimiento de las API, como URL.canParse()
los temporizadores.
Al mismo tiempo, se actualizará Ada
a 2.0, que es un C++
excelente analizador de URL escrito en , para un mejor rendimiento del análisis de URL.
Finalmente, el equipo de desarrollo también está optimizando el rendimiento de stream
, y decodificadores de cadenas a través de la refactorización .URL
URLSearchParams
Nuevos cambios y destacados
modelo de permiso
El modelo de permisos de Node.js todavía es una característica experimental y se usa para restringir el acceso a recursos específicos durante la ejecución. En concreto, incluye las siguientes funciones:
- Uso
--allow-fs-read
y--allow-fs-write
restricción del acceso al sistema de lectura y escritura de archivos - Usar
--allow-child-process
acceso restringido a child_process - Usar
--allow-worker
acceso restringido a worker_threads --no-addons
El acceso a complementos nativos está restringido usando
Al introducir --allow-fs-read
y --allow-fs-write
, los desarrolladores de Node.js tienen más control sobre el acceso al sistema de archivos. Estas características experimentales permiten un control más detallado sobre el acceso al sistema de archivos por parte de los procesos de Node.js.
Para habilitar estas banderas, los desarrolladores pueden usar --experimental-permission
, seguido de los permisos requeridos. Por ejemplo, ejecute el siguiente comando para permitir el acceso de lectura y escritura a todo el sistema de archivos:
$ node --experimental-permission --allow-fs-read=* --allow-fs-write=* index.js
Este comando también admite patrones de comodines, por ejemplo, el siguiente comando permite el acceso de lectura a todos los archivos y carpetas /home/
en el directorio que comienzan con prueba:test
$ node --experimental-permission --allow-fs-read=/home/test* index.js
Los patrones comodín también se pueden usar para permitir el acceso a varios archivos o carpetas a la vez. Por ejemplo, el siguiente comando permite el acceso de lectura a todos los archivos y carpetas en el directorio /home/ que comienzan con prueba:
$ node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read=/home/index.js index.js
Cuando el modelo de permisos está habilitado, puede usarlo process.permission
para verificar los permisos.
process.permission.has("fs.write"); // true
process.permission.has("fs.write", "/home/nodejs/protected-folder"); // true
Documentación detallada: https://nodejs.org/api/permissions.html#process-based-permissions
Relaciones públicas relacionadas: https://github.com/nodejs/node/pull/44004
El cargador ESM está a punto de entrar en la etapa estable
En Node.js, podemos cargar el módulo ESM a través ESM loader
del enlace del ciclo de vida, que es este formulario. --experimental-loader=./foo.mjs
Y ahora Node.js 20 admite la ejecución de módulos cargados en un subproceso dedicado aislado del subproceso principal. Esto proporciona un alcance separado para los módulos cargados y garantiza que no haya contaminación cruzada entre los módulos cargados y el código de la aplicación. Además, para ser consistente con el comportamiento del navegador, import.meta.resolve()
el valor predeterminado ahora es regresar de forma síncrona.
Estos son ESM loader
los últimos cambios destacados antes de entrar en la etapa estable. Cuando los cambios anteriores se estabilicen, el funcionario marcará estas funciones como estables. Esto sienta las bases para un uso más amplio de ESM por parte de las aplicaciones de Node.js.
Relaciones públicas relacionadas: https://github.com/nodejs/node/pull/44710
Motor V8 versión 11.3
Node.js 20 actualizó el motor V8 a 11.3 (parte de Chromium 113). El nuevo motor trae las siguientes novedades:
- Soporte
String.prototype.isWellFormed
ytoWellFormed
.isWellFormed
Se utiliza para verificar si la cadena es un Unicode legal ytoWellFormed
convertirá una cadena a Unicode.
- Proporciona funciones que mutan Array y TypedArray y devuelven una copia de la matriz mutada.
Array.prototype
Las funciones y existentesTypedArray.prototype
modifican directamente la matriz recibida. En su lugar, la nueva función devuelve una copia modificada de la matriz recibida, dejando la matriz original sin cambios. Estas nuevas funciones son útiles en estilos de programación donde los datos son inmutables.
- ArrayBuffer redimensionable y SharedArrayBuffer ampliable.
- Las expresiones regulares admiten
v
banderas y+
extensiones.- Este cambio agrega operaciones de configuración en cadenas, literales de cadena y propiedades Unicode a las expresiones regulares. Con estos cambios, los desarrolladores pueden usar expresiones regulares para unir cadenas con caracteres Unicode específicos.
- Ejemplo: use
/[\p{Script_Extensions=Greek}&&\p{Letter}]/v
para hacer coincidir todas las letras griegas.
- Llamadas de cola de WebAssembly.
Relaciones públicas relacionadas: https://github.com/nodejs/node/pull/47251
El módulo Test Runner ha entrado en la etapa estable
test_runner
El módulo ha entrado en la etapa estable en Node.js 20. Se utiliza principalmente para escribir y ejecutar archivos de prueba, incluidos:
describe
//it
funcionestest
y ganchos para archivos de prueba.- datos simulados.
- Supervisar el modo de cambio de archivo (modo de vigilancia).
node --test
Admite la ejecución de varios archivos de prueba en paralelo.
Aquí hay test_runner
un ejemplo de un archivo de prueba utilizado:
import {
test, mock } from "node:test";
import assert from "node:assert";
import fs from "node:fs";
mock.method(fs, "readFile", async () => "Hello ZY");
test("synchronous passing test", async (t) => {
// This test passes because it does not throw an exception.
assert.strictEqual(await fs.readFile("zy.txt"), "Hello ZY");
});
Relaciones públicas relacionadas: https://github.com/nodejs/node/pull/46983
El blob debe pasarse al preparar una sola aplicación ejecutable
Las aplicaciones ejecutables únicas (SEA) se refieren a programas que se pueden ejecutar directamente en el sistema operativo sin depender del entorno Node.js. Por lo general, los desarrolladores elegirán pkg
y boxednode
otras soluciones comunitarias para empaquetar una aplicación Node.js en un archivo ejecutable. Node.js estableció un equipo relacionado en 2022 para proporcionar una solución de generación SEA oficial. A partir de ahora, las funciones relacionadas con SEA siguen siendo funciones experimentales .
En Node.js 20, la creación de una sola aplicación ejecutable ahora requiere inyectar un blob preparado en Node.js desde una configuración JSON en lugar de archivos JS sin procesar, un cambio que permite incorporar múltiples recursos compartidos en SEA.
Por ejemplo:
mar-config.json
{
"main": "hello.js",
"output": "sea-prep.blob"
}
Esto escribirá el blob en un archivo sea-prep.blob
.
$ node --experimental-sea-config sea-config.json
De esta manera, este blob se puede inyectar en el binario.
Relaciones públicas relacionadas: https://github.com/nodejs/node/pull/47125
API criptográfica web
En Node.js 20, los parámetros de función de Web Crypto API se modifican de acuerdo con el estándar WebIDL, para que estén alineados con otras implementaciones de Web Crypto API, como los navegadores. Esto mejora aún más la interoperabilidad de Web Crypto API de Node.js con otras implementaciones.
Relaciones públicas relacionadas: https://github.com/nodejs/node/pull/46067
Soporte ARM64 Windows
Node.js es compatible con tantas plataformas y arquitecturas que los desarrolladores esperan que funcione en cualquier entorno. ¡La buena noticia es que Node.js 20 ahora es compatible con Windows ARM64!
Relaciones públicas relacionadas: https://github.com/nodejs/node/pull/47233
Nuevos desarrollos en WASI (Web Assembly System Interface)
Aunque las funciones relacionadas con WASI aún son experimentales en Node.js , en Node.js 20, ya no necesitamos usar las opciones de línea de comandos para habilitar WASI. Además, new WASI()
al instanciar un objeto WASI, version
se debe pasar un parámetro de forma predeterminada para aclarar su versión correspondiente.
Actualizar Node.js
Node.js 14 llegará al final de su vida útil en abril de 2023 y Node.js 16 (LTS) llegará al final de su vida útil en septiembre de 2023.
¡Así que es hora de comenzar a pensar en actualizar Node.js a Node.js 18 (LTS) o Node.js 20 (que pronto será LTS)!