2.3. 技术预览功能
在 Node.js 20 LTS 发行版本中,以下功能作为技术预览功能提供。
2.3.1. 实验性 WASI 功能增强 复制链接链接已复制到粘贴板!
实验性 WebAsembly 系统接口(WASI)功能在此发行版本中包括以下改进:
-
WASI 不再需要使用
experimental-wasi-unstable-preview1命令行界面(CLI)标记来启用此功能。此功能增强有助于使 WASI 更易于使用。 -
WASI 现在要求任何新的
WASI() 调用都包含version选项来请求特定的 WASI 版本。因为 Node.js 支持不同版本的 WASI,且version选项没有默认值,所以您必须确保应用程序中的所有新WASI ()调用都请求特定版本。否则,错误结果。
如需更多信息,请参阅 Node.js WebAssembly System Interface (WASI)文档。
2.3.2. 权限模型 复制链接链接已复制到粘贴板!
红帽构建的 Node.js 20 引入了实验性权限模型功能。此功能使开发人员能够限制在程序执行过程中对特定资源的访问,如文件系统操作、子进程生成和 worker 线程创建。这意味着,您可以防止应用程序访问或修改敏感数据,或者运行潜在的代码。
您可以使用 --experimental-permission CLI 标志启用 Permission Model 功能。通过启用此功能,您可以自动限制对所有可用权限的访问。
要管理权限,您可以使用以下 CLI 标志:
-
要管理文件系统权限,请使用
--allow-fs-read和--allow-fs-write标志。 -
若要管理子进程权限,可使用
--allow-child-process标志。 -
要管理 worker 线程权限,请使用
--allow-worker标志。
如需更多信息,请参阅 Node.js 权限模型文档。
2.3.3. 追踪频道 复制链接链接已复制到粘贴板!
红帽构建的 Node.js 20 引入了 TracingChannel 类,作为 Diagnostics Channel 功能的实验性扩展。追踪频道有助于对诊断频道进行分组,这些频道代表单个可追踪操作执行生命周期的不同点,用于生成和使用 trace 数据。因此,追踪频道有助于规范化和简化为追踪应用程序流生成事件的过程。
如需更多信息,请参阅 Node.js TracingChannel 文档。
2.3.4. Mock Timers 复制链接链接已复制到粘贴板!
红帽构建的 Node.js 20 引入了一个实验性的 Mock Timers 功能,可让开发人员为依赖计时器的功能编写更可预测且可靠的测试。计时器模拟是一种常用的技术,可用于模拟和测试计时器行为,而无需等待指定的时间间隔。Mock Timers 功能包含一个 MockTimers 类,可让您从全局对象和 node:timers /promises API 中模拟对 setTimeout () 和 setInterval () 方法的调用。
Mock Timers 功能提供了一个简单的 API,用于提前时间,启用特定的计时器,并释放所有计时器。
例如:
import assert from 'node:assert';
import { test } from 'node:test';
test('mocks setTimeout to be executed synchronously without having to actually wait for it', (context) => {
const fn = context.mock.fn();
// Optionally choose what to mock
context.mock.timers.enable(['setTimeout']);
const nineSecs = 9000;
setTimeout(fn, nineSecs);
const threeSeconds = 3000;
context.mock.timers.tick(threeSeconds);
context.mock.timers.tick(threeSeconds);
context.mock.timers.tick(threeSeconds);
assert.strictEqual(fn.mock.callCount(), 1);
如需更多信息,请参阅 Node.js Mocking: Timers 文档。
2.3.5. 内置 .env 文件支持 复制链接链接已复制到粘贴板!
红帽构建的 Node.js 20 引入了一个实验性功能,用于在 .env 文件中配置环境变量,该文件在启动时传递给 Node.js 应用程序。与 .ini 文件格式类似,.env 配置文件中的每一行包含特定环境变量的键值对。例如:
PASSWORD=nodejs
您可以使用 --env-file 标志,使用预定义的环境变量初始化并运行 Node.js 应用程序。例如:
node --env-file=myconfig.env myapp.js
按照上例所示初始化应用程序时,您可以使用 process.env 属性访问相关的环境变量。例如,若要访问 PASSWORD=node.js 环境变量,您可以使用 process.env.PASSWORD 属性。
此功能增强还允许您在 .env 配置文件中定义 NODE_OPTIONS 环境变量,无需在 package.json 文件中包含 NODE_OPTIONS。