内容提要
Node.js 20.6.0版本开始支持.env文件配置环境变量,简化了NODE_OPTIONS的定义。新增的import.meta.resolve方法可获取绝对URL,node:module提供了注册模块自定义钩子的API。此外,该版本改进了C++垃圾回收支持,增强了模块加载过程的定制性。
延伸解读
环境变量配置的简化
Node.js 20.6.0 开始支持 .env 文件,采用 INI 格式定义环境变量,通过 --env-file 参数加载。这简化了 NODE_OPTIONS 的定义,无需再写入 package.json。对于需要管理多环境配置的项目,此特性提供了更清晰、更易维护的方式,同时保持了与现有 process.env 访问的兼容性。
模块定制能力的增强
新增的 import.meta.resolve 方法使 ES 模块能获取绝对 URL,与 CommonJS 的 require.resolve 对齐,并与其他运行时保持一致。同时,node:module 的 register API 允许注册模块自定义钩子,支持主线程与钩子线程间通信,并鼓励使用 --import 方式确保钩子在应用代码前注册。这些改进提升了模块加载过程的灵活性和可定制性。
C++ 垃圾回收支持的改进
Node.js 启动时确保 V8 isolate 附加 v8::CppHeap,允许使用 cppgc 头文件进行内存分配。新增的 node::SetCppgcReference 函数帮助创建 JavaScript 到 C++ 的引用,便于垃圾回收。但需注意,cppgc 的 ABI 稳定性在 semver-minor 和 -patch 更新中暂不保证,尽管其已在 Chromium 中稳定多年。
Q&A
Node.js 20.6.0版本新增了哪些功能?
Node.js 20.6.0版本新增了对.env文件的支持、import.meta.resolve方法、node:module的注册API,以及改进的C++垃圾回收支持。
.env文件在Node.js 20.6.0中如何使用?
在Node.js 20.6.0中,可以通过.env文件配置环境变量,文件格式为INI格式,每行包含一个键值对。
import.meta.resolve方法的作用是什么?
import.meta.resolve方法用于获取指定模块的绝对URL,类似于CommonJS中的require.resolve。
node:module提供了什么新的API?
node:module提供了一个新的register API,用于指定导出模块自定义钩子的文件,并允许在主线程与钩子线程之间传递数据。
Node.js 20.6.0如何改进C++垃圾回收支持?
Node.js 20.6.0改进了C++垃圾回收支持,用户可以使用v8::CppHeap进行内存分配,并添加JavaScript与C++对象的引用。
如何在Node.js中使用node::SetCppgcReference函数?
node::SetCppgcReference函数用于添加JavaScript与C++对象的引用,以便垃圾回收,可以在Node.js的addon测试中找到示例。