皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

Node v20.10.0 (LTS)发布

Node v20.10.0 (LTS)发布

显著变更
用于翻转模块默认值的 –experimental-default-type 标志
新标记 –experimental-default-type 可用于翻转 Node.js 使用的默认模块系统。已明确定义为 ES 模块或 CommonJS 的输入(如 package.json 的 “类型 “字段或 .mjs/.cjs 文件扩展名或 –input-type 标志)不受影响。在 –experimental-default-type=module 下,目前隐式定义为 CommonJS 的内容将被解释为 ES 模块:

如果未指定–input-type,则通过–eval 或 STDIN 提供字符串输入。

如果同一文件夹或任何父文件夹中没有 package.json 文件,则以 .js 结尾或没有扩展名的文件。

以 .js 结尾或无扩展名的文件,如果最近的父级 package.json 字段缺少类型字段;除非该文件夹位于 node_modules 文件夹内。

此外,如果传递了 –experimental-wasm-modules 且文件包含 Wasm 头信息 “magic bytes”,无扩展名的文件也会被解释为 Wasm 文件。

由 Geoffrey Booth 在 #49869 中提供。

在模棱两可的 JavaScript 中检测 ESM 语法
新标记 –experimental-detect-module 可用于在语法可被检测到时自动运行 ES 模块。对于 “模棱两可 “的文件(即没有类型字段的 .js 或无扩展名文件 package.json),Node.js 将解析文件以检测 ES 模块语法;如果发现,它将把文件作为 ES 模块运行,否则将把文件作为 CommonJS 模块运行。这同样适用于通过 –eval 或 STDIN 输入的字符串。

我们希望在未来的 Node.js 版本中默认启用检测功能。检测会增加启动时间,因此我们鼓励每个人(尤其是软件包作者)在 package.json 中添加一个类型字段,即使是默认的 “type”:”commonjs”。如果存在类型字段或显式扩展名(如 .mjs 或 .cjs),则将退出检测。

由 Geoffrey Booth 在 #50096 中提供。

文件系统函数中的新 flush 选项
在写入文件时,数据可能不会立即刷新到永久存储中。这样,后续读取操作就会看到陈旧的数据。此 PR 为 fs.writeFile 系列函数添加了一个 “刷新 “选项,可在成功写入操作结束时强制刷新数据。

由 Colin Ihrig 在 #50009 和 #50095 中提供。

实验性 WebSocket 客户端
添加了一个 –experimental-websocket 标志,用于添加由 WHATWG 标准化的 WebSocket 全局。

由 Matthew Aitken 在 #49830 中提供。

vm:修复 vm.Script 的 V8 编译缓存支持
vm.Script 添加 importModuleDynamically 支持后,之前使用 vm.Script 对相同源代码进行重复编译的工作在 v16.x 之后不再命中 V8 编译缓存,导致性能回归,阻碍了用户(尤其是 Jest 用户)从 v16.x 升级。

最近的修正允许 vm.Script 在不使用 –experimental-vm-modules 时(即使存在 importModuleDynamically 选项)再次进入编译缓存,因此受性能退步影响的用户现在可以升级了。此外,我们还在不断努力为 vm.CompileFunction 启用编译缓存支持。

由 Joyee Cheung 在 #49950 和 #50137 中提供。

更多 Node v20.10.0 (LTS) | Node.js (nodejs.org)