2.3. 技术预览功能


以下功能作为 Node.js 22 LTS 发行版中的技术预览功能提供。

2.3.1. 支持与浏览器兼容的 WebSocket 客户端

红帽构建的 Node.js 22 包括适用于 WebSocket API 的实验性内置浏览器的实现。此功能增强提供了一个没有外部依赖项的 WebSocket 客户端。

此功能默认为启用。如果要禁用此功能,您可以使用 --no-experimental-websocket CLI 标志。

2.3.2. ESM 兼容性的改进

红帽构建的 Node.js 22 包括对 ECMAScript 模块(ESM)兼容性的以下实验性增强。

此发行版本包括对 import.meta.dirnameimport.meta.filename 属性的实验性支持,它们从本地文件系统加载。对于 基于文件的ESM,这些属性等同于 CommonJS __filename__dirname 全局变量。import.meta.filename 属性提供模块的完整路径作为文件路径而不是 URL。import.meta.dirname 属性提供包含该模块的文件夹的完整路径。

注意

这些属性不适用于非 文件:基于 ESM,如从 数据加载的模块:https: URL。

如需更多信息,请参阅 Node.js import.meta 文档。

2.3.2.2. 支持自动检测和运行 ESM 语法

当 JavaScript 中检测到 ESM 语法时,这个版本包括对运行 ECMAScript (ES)模块的实验性支持。对于 nearest package.json 文件没有 type 字段的模糊 .js 或无扩展文件,Node.js 会解析该文件来检查 ESM 语法。如果检测到 ESM 语法,Node.js 将文件作为 ES 模块运行。否则,如果对文件类型有不确定,Node.js 会将该文件作为 CommonJS 模块运行。此功能的典型用例是在无 nearby package.json 文件的扩展脚本中使用 ES 模块语法。

此功能默认为启用。如果要禁用此功能,您可以使用 --no-experimental-detect-module CLI 标志。

注意

这个自动检测功能会增加启动时间。为了帮助避免检查 ESM 语法的开销,请考虑在 package.json 文件中添加 type 字段,或使用显式文件扩展,如 .mjs.cjs

2.3.2.3. 支持需要同步 ESM 图形

此发行版本添加了对使用带有同步 ESM 图形的 require () 函数的实验性支持。您可以使用- -experimental-require-module CLI 标志启用此功能。

要载入模块,该模块必须满足以下要求:

  • 在 nearest package.json 文件或 .mjs 扩展中使用 type:module 字段明确标记为 ES 模块
  • 完全同步,不包含顶级的 await 表达式

require () 函数将请求的模块作为 ES 模块加载,并返回模块命名空间对象。这个行为与动态 导入 () 功能类似,但 require () 函数是异步运行的,并直接返回命名空间对象。

如需更多信息,请参阅使用 require ()文档的 Node.js 加载 ECMAScript 模块

2.3.3. TypeScript 支持

红帽构建的 Node.js 22 引入了 TypeScript 支持的以下实验性功能。

2.3.3.1. 使用类型剥离的 TypeScript 支持

此发行版本包含一个实验性功能,它从 .ts 文件中剥离类型注解,它允许这些文件在不转换特定于 TypeScript 的语法的情况下运行。您可以使用- experimental-strip-types CLI 标志启用此功能。

这个功能有以下限制:

  • 仅支持内联类型注解
  • 不支持 enums 或命名空间等功能
  • 需要 导入 中的显式文件扩展,并需要 语句
  • 强制使用 type 关键字进行类型导入,以避免运行时错误
  • 在默认情况下为 node_modules 中的 TypeScript 禁用

如需更多信息,请参阅 Node.js 类型剥离 文档。

2.3.3.2. 转换类型支持

此发行版本包含一个实验性功能,它允许将 TypeScript-only 语法转换为 JavaScript 代码。此功能允许红帽构建的 Node.js 支持 TypeScript 语法,如 Enum 和命名空间。您可以使用- -experimental-transform-types CLI 标志启用此功能。

如需更多信息,请参阅 Node.js 模块:TypeScript 文档。

2.3.4. 实验性 Web Storage API

红帽构建的 Node.js 22 引入了使用 SQLite 进行数据存储的 Web 存储 API 的实验性实施。您可以使用- -experimental-webstorage CLI 标志启用此功能。

如需更多信息,请参阅 Node.js --experimental-webstorage 文档。

2.3.5. 实验性 sqlite API

Red Hat build of Node.js 22 引入了内置 node:sqlite 模块的一个实验性功能,您可以使用 --experimental-sqlite CLI 标志启用它。

以下示例演示了如何使用 node:sqlite 模块打开内存数据库,将数据写入数据库,并重新读取数据:

import { DatabaseSync } from 'node:sqlite';
const database = new DatabaseSync(':memory:');

// Execute SQL statements from strings.
database.exec(`
  CREATE TABLE data(
    key INTEGER PRIMARY KEY,
    value TEXT
  ) STRICT
`);
// Create a prepared statement to insert data into the database.
const insert = database.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
// Execute the prepared statement with bound values.
insert.run(1, 'hello');
insert.run(2, 'world');
// Create a prepared statement to read data from the database.
const query = database.prepare('SELECT * FROM data ORDER BY key');
// Execute the prepared statement and log the result set.
console.log(query.all());
// Prints: [ { key: 1, value: 'hello' }, { key: 2, value: 'world' } ]
Copy to Clipboard Toggle word wrap

如需更多信息,请参阅 Node.js SQLite 文档。

2.3.6. 对 Navigator API 的部分支持

红帽构建的 Node.js 22 包含一个实验性 Navigator 全局对象。Navigator 对象是 Navigator API 的部分实施,用于表示用户代理的身份和状态。

如需更多信息,请参阅 Node.js Navigator 文档。

2.3.7. 文本样式 API

红帽构建的 Node.js 22 包含一个实验性 util.styleText (format, text) 功能,它根据提供的格式和文本字符串参数返回格式文本。您可以使用这个新 API 格式化文本(例如,红色blue绿色)和表述风格(例如,斜体粗体、下划线)。

以下示例将文本 Hello World 格式化为绿色字体:

const { styleText } = require('node:util');
const myMessage = styleText('green', 'Hello World');
console.log(myMessage);
Copy to Clipboard Toggle word wrap

以下示例将文本 Error! 格式化为粗体红色字体:

const { styleText } = require('node:util');
const myMessage = styleText(['red', 'bold'], 'Error!');
console.log(myMessage);
Copy to Clipboard Toggle word wrap

如需更多信息,请参阅 Node.js util.styleText 文档。

2.3.8. 用于加载和解析环境变量的 API

除了在文件中定义环境变量的现有实验性支持外,红帽构建的 Node.js 22 还包括用于编程加载和环境变量解析的以下实验性 API:

  • process.loadEnvFile (path) 函数从指定路径加载 .env 文件。

    例如,以下代码从 测试 子目录中加载 development.env 文件:

    const { loadEnvFile } = require('node:process');
    loadEnvFile('./test/development.env');
    Copy to Clipboard Toggle word wrap

    如果您没有指定路径(例如 loadEnvFile ()),则此功能会加载当前目录中的 .env 文件。

    如需更多信息,请参阅 Node.js process.loadEnvFile 文档。

  • util.parseEnv (content) 函数解析提供的字符串,该字符串包含 attribute=value 对中的环境变量分配。

    例如:

    const { parseEnv } = require('node:util');
    parseEnv('HELLO=world');
    Copy to Clipboard Toggle word wrap

    如需更多信息,请参阅 Node.js util.parseEnv 文档。

2.3.9. 磁盘代码缓存

红帽构建的 Node.js 22 引入了以下实验性功能,为自动磁盘上代码缓存提供两个替代解决方案。

2.3.9.1. NODE_COMPILE_CACHE 环境变量

此发行版本包括实验性 NODE_COMPILE_CACHE 环境变量,用于启用自动磁盘代码缓存。此功能允许 Node.js 使用磁盘 V8 代码缓存,该缓存在 Node.js 编译 CommonJS 或 ECMAScript (ES)模块时会保留在指定目录中。此功能有助于加快软件编译过程。您可以使用 NODE_COMPILE_CACHE 环境变量指定到缓存目录的路径(例如: NODE_COMPILE_CACHE=/path/to/cache/dir)。

此功能可能会增加模块图形第一次负载的负载时间。但是,如果模块的内容没有改变,此功能也可以显著减少同一模块图的任何后续负载的负载时间。

如果要清除生成的缓存,请删除您在 NODE_COMPILE_CACHE 环境变量中指定的缓存目录。红帽构建的 Node.js 在下次使用此目录时自动重新创建指定的目录。

注意

红帽构建的 Node.js 的不同版本无法使用相同的编译缓存。每个产品版本生成自己的独立缓存。如果在不同产品版本间使用相同的目录,则不同产品版本生成的缓存会单独存储在同一目录中。

目前,在 V8 JavaScript 代码覆盖的情况下,V8 收集的功能在从代码缓存中进行反序列化的功能中可能会更精确。在这种情况下,请考虑在运行测试时禁用自动磁盘上代码缓存,以生成精确的覆盖范围。

2.3.9.2. API module.enableCompileCache()

此发行版本包含一个实验性 module.enableCompileCache () API,用于启用在调用此 API 后载入的所有模块的磁盘上代码缓存。这个 API 为磁盘代码缓存提供了一个替代解决方案,并在与 NODE_COMPILE_CACHE 环境变量相比有以下优点:

  • module.enableCompileCache () API 可供工具和库作者使用,以启用其自身代码的缓存。NODE_COMPILE_CACHE 环境变量只能由最终用户使用。
  • module.enableCompileCache () API 是 v8-compile-cache 和 v8-compile-cache -lib 软件包的内置替代方案,还提供更好的性能并支持 ECMAScript 模块(ESM)。

如需更多信息,请参阅 Node.js module.EnableCompileCache 文档。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat