近日,Node.js 13.0 在 GitHub 上正式发布,同时 12.x 版本转入了长期支持阶段(LTS)。虽然 13.0 版本还并未进入 LTS,但在构建、控制台、域等诸多方面进行了“重大更改”。本文主要对 Node.js 13.0 的更新内容进行了梳理,希望能给正在了解 Node.js 最新版本的读者带来帮助。
重大更改
断言:
如果传递给 assert.throws() 或 assert.rejects() 的验证函数返回非 true 的值,则将抛出断言错误来高亮显示编程错误,替代原来的错误信息(Ruben Bridgewater)#28263。
如果传递了构造函数来验证 assert.throws() 或 assert.reject() 抛出的错误实例,将抛出断言错误,替代原来的错误信息(Ruben Bridgewater)#28263。
构建:
新的 Node.js 版本默认支持完整 icu。这意味着新版包含了 ICU 支持的所有语言环境,并且与 Intl 相关的 API 会返回与之前不同的值(Richard Lau)#29887。
macOS 支持的最低 Xcode 版本已提升到 10。仍然可以使用 Xcode 8 构建 Node.js,但在 v13.x 未来版本中可能就不再支持了(Michael Dawson)#29622。
child_process:
ChildProcess._channel(DEP0129)现在是弃用的运行时(cjihrig)#27949。
控制台:
现在输出 console.timeEnd() 和 console.timeLog() 会自动选择合适的时间单位,不再一直使用毫秒了(Xavier Stouder)#29251。
deps:
V8 引擎已更新到 7.8 版。新版提升了对象解构的性能、改善了内存使用并缩短了 WebAssembly 启动时间(Myles Borins)#29694。
域:
现在域的错误处理工作时会将活动域设置为域的父级,以防止内部递归(Julien Gilli)#26211。
fs:
移除了未记录的方法 FSWatcher.prototype.start()(Lucas Holmquist)#29905。
现在在 ReadStream 或 WriteStream 上调用 open() 方法会发出一个运行时弃用警告。这些方法应该是内部的,不应由用户代码调用(Robert Nagy)#29061。
fs.read/write、fs.readSync/writeSync 和 fd.read/write 现在接受任何安全整数作为其 offset 参数。offset 的值也不是强制的,因此必须将有效的类型传递给函数(Zach Bjornson)#26572。
http:
中止的请求在 aborted 后不再发出 end 或 error 事件(Robert Nagy)#27984,#20077。
套接字错误后将不再发出数据(Robert Nagy)#28711。
旧版 HTTP 解析器(以前在 --http-parser=legacy 标志下面)已移除(Anna Henningsen)#29589。
现在已将 HTTP 请求的 host 选项验证为字符串值(Giorgos Ntemiris)#29568。
现在 request.connection 和 response.connection 属性都是弃用的运行时。应该使用等效的 request.socket 和 response.socket(Robert Nagy)#29015。
http,http2:
默认服务器超时已移除(Ali Ijaz Sheikh)#27558。
425 状态代码名称已符合 RFC8470。名称从“Unordered Collection”改为“Too Early”(Sergei Osipov)#29880。
lib:
error.errno 属性现在将始终是数字。要获得字符串值,请改用 error.code(Joyee Cheung)#28140。
模块:
module.createRequireFromPath() 已弃用。请改用 module.createRequire()(cjihrig)#27951。
src:
现在,更改 process.env.TZ 的值将清除 tz 缓存。这将影响一些方法使用的默认时区,如 Date.prototype.toString(Ben Noordhuis)#20026。
流:
流的时序和行为在许多方面做出了改进和增强。请查看下面对应的各个提交以获取更多信息。
原文链接:https://github.com/nodejs/node/releases/tag/v13.0.0
评论