内容提要
Node.js新增了对导入属性的支持,使用“with”关键字替代旧的导入断言语法,简化迁移过程。同时,新增了dirent.parentPath和实验性功能node_api_nogc_env,以改善垃圾回收状态,并修复了vm.Script的编译缓存问题,提升了性能。
延伸解读
导入属性语法变更的迁移影响
Node.js 18.20.0 将导入断言语法从 assert 改为 with,并计划在未来主要版本中移除 assert。这意味着现有代码中所有使用 assert 的导入语句都需要更新为 with,否则在升级到未来版本时可能出错。由于该变更已向后移植到所有当前支持的发布线,开发者现在就可以开始迁移,避免未来集中修改。
dirent.path 的替代方案
新增的 dirent.parentPath 属性用于替代旧的 dirent.path。虽然文章未明确说明 dirent.path 是否会被移除,但建议开发者尽快将代码中对 dirent.path 的引用改为 dirent.parentPath,以确保与未来版本的兼容性。这一变更可能影响文件系统遍历相关的代码。
实验性垃圾回收隔离功能
引入的 node_api_nogc_env 和 node_api_nogc_finalize 是实验性功能,旨在隔离影响垃圾回收状态的终结器。开发者可以通过定义 NODE_API_EXPERIMENTAL_NOGC_ENV_OPT_OUT 来关闭此功能。由于是实验性的,在生产环境中使用需谨慎,并关注后续版本的变化。
vm.Script 编译缓存性能修复
修复了 vm.Script 的编译缓存问题,使得在不使用 --experimental-vm-modules 标志时,即使存在 importModuleDynamically 选项,也能再次命中 V8 编译缓存。这解决了自 v16.x 以来因性能回归而阻碍用户(尤其是 Jest 用户)升级的问题。开发者现在可以升级到 18.20.0 以获得性能提升。
Q&A
Node.js 18.20.0中新增了哪些导入属性的支持?
新增了对导入属性的支持,使用'with'关键字替代旧的'import assertions'语法。
为什么要用'with'关键字替代'assert'关键字?
'with'关键字将取代未来版本中将被移除的'assert'关键字,以简化迁移过程。
dirent.parentPath的作用是什么?
dirent.parentPath替代了旧的dirent.path,用于获取目录项的父路径。
node_api_nogc_env是什么?
node_api_nogc_env是一个实验性功能,用于改善垃圾回收状态,允许更灵活的内存管理。
vm.Script的编译缓存问题是如何解决的?
修复了vm.Script的编译缓存问题,允许在不使用--experimental-vm-modules的情况下再次命中编译缓存,从而提升性能。
Node.js 18.20.0的更新对用户有什么影响?
更新简化了迁移过程,改善了性能,并引入了新的API,提升了开发体验。