内容提要
Node.js v20.16.0(LTS)已发布。此版本包含若干错误修复和改进。该版本引入了process.getBuiltinModule(id)方法,该方法允许在全局可用的函数中加载内置模块。它还不再支持OpenSSL 3中的自定义引擎,并修复了Debugger.setAsyncCallStackDepth函数中的一个错误。此版本还包括对各种依赖项的更新和对测试运行器的改进。
延伸解读
process.getBuiltinModule 的实用场景
process.getBuiltinModule(id) 为需要在非 Node.js 环境(如浏览器)中运行的 ES 模块提供了一种条件加载 Node.js 内置模块的方式。通过检查 globalThis.process?.getBuiltinModule 是否存在,模块可以判断当前是否运行在 Node.js 中,并同步加载内置模块,避免了使用 import 可能抛出的解析错误,也无需将模块改为异步。
OpenSSL 3 自定义引擎支持移除的影响
Node.js v20.16.0 不再支持 OpenSSL 3 中的自定义引擎,这意味着依赖 clientCertEngine、privateKeyEngine、privateKeyIdentifier 选项或 crypto.setEngine() 的代码将无法正常工作。开发者应按照 OpenSSL 的建议迁移到新的提供者(provider)模型,以确保 TLS 和加密功能的兼容性。
调试器异步堆栈深度修复的意义
修复了 Debugger.setAsyncCallStackDepth 错误调用 enable 函数的问题。此前,当 Chrome DevTools 发送深度为 0 的 setAsyncCallStackDepth 请求时,异步钩子无法正确关闭,可能导致性能分析数据不准确或资源泄漏。该修复确保了异步钩子能在深度为 0 时正确禁用。
Q&A
Node.js v20.16.0版本有什么新特性?
Node.js v20.16.0引入了process.getBuiltinModule(id)方法,允许在全局可用的函数中加载内置模块,并修复了Debugger.setAsyncCallStackDepth函数中的错误。
如何使用process.getBuiltinModule(id)方法?
可以通过调用globalThis.process.getBuiltinModule(id)来加载指定的内置模块,如果id对应的模块存在,则返回该模块,否则返回undefined。
Node.js v20.16.0对OpenSSL的支持有什么变化?
该版本不再支持OpenSSL 3中的自定义引擎,建议用户切换到新的提供者模型。
Node.js v20.16.0修复了哪些错误?
修复了Debugger.setAsyncCallStackDepth函数中的错误,确保异步钩子在深度为0时正确关闭。
Node.js v20.16.0的测试运行器有哪些改进?
该版本对测试运行器进行了改进,具体细节未详细说明,但整体性能和功能得到了提升。
Node.js v20.16.0的依赖项更新了哪些?
该版本更新了各种依赖项,具体更新内容未详细列出。