以代号“Dubnium”为代表的Node 10于2018年4月24日发布,并将于2018年10月进入长期支持(LTS)。JavaScript开发人员一直在激动地等待今天,今天我们来看看这个版本带来的新特征。
Adding Error Codes
现在,Node中的错误信息已被标准化。
在Node环境中,处理错误信息一直是一个痛苦的工作。 以前,它们只包含一个没有其他标识符关联的字符串消息。 如果开发人员希望程序根据特定消息采取调试操作,唯一的办法是对错误内容进行字符串比较。
由于错误信息的处理需要精确的字符串匹配,因此即使对消息的最小更新也无法添加到下一个主要节点版本,以便它不会中断SemVer。 通过将错误从消息中解耦出来,它将使开发人员更轻松地工作,并允许Node在不引入重大更改的情况下改进错误消息。 要了解更多信息,请阅读Michael Dawson的文章节点错误代码。
N-API 不再是实验性功能
Node文档将N-API描述为构建本地插件的API。 它独立于底层的JavaScript运行时(ex V8),并作为Node.js本身的一部分进行维护。 这个API将是跨Node.js版本稳定的应用程序二进制接口(ABI)。 它旨在将Addons与基础JavaScript引擎中的更改隔离,并允许为一个版本编译的模块在更高版本的Node.js上运行,而无需重新编译。
之前在Node 8中实验性地引入了N-API,并将从Node 10开始稳定。在Node版本之间升级不再会引起模块损坏。 它也将向后移植以实现Node.js v6.x和v8.x的兼容性。
原生的 Node HTTP/2 变得更稳定
Node 8 引入了一个实验性的 HTTP/2 模块,这次是对 Node 的一次很好的升级。 HTTP/2 改进了标准的 HTTP 协议:
多路复用
单一连接
服务器推送
优先级
头压缩
脱离实验阶段后,原生的 HTTP/2 模块将有助于改进节点服务器和它们提供的Web体验。
V8 引擎 v6.6 的性能改进
Node 停止使用 Chromium 中的 V8 JavaScript引擎,并且 Node.js v10 使用了最新版本的V8 引擎。 对于浏览器而言,Chrome 66 提供的V8 Engine v6.6在JavaScript的解析和编译时间方面可以减少约20-40%。 因此,我们可以预期 Node 10 也会在这方面有更大的收益。 而且它还提供异步生成器和阵列性能改进。
速度才是最重要的,最新的版本并不会让人失望。 查看V8团队的文章以了解更多信息。
更好地支持ES模块(ESM)
// ESM
import pkg from “./pkg”
export default { a, b: 2 }
vs.
// CJS
const pkg = require(“./pkg”)
module.exports = { a, b: 2 }
虽然我们在 Node 10 中没看到对ES模块的全部支持,但他们仍在努力完善。
Node.js 一直在使用CommonJS(CJS),它是 require 和 module.exports 语法。 在2015年的史诗级ES6版本中,推出了一种新的模块系统,即ECMAScript模块(ESM)。 作为ECMA的官方实施以及开发人员的热爱和广泛采用,Node一直致力于实施ESM规范。
将ESM集成到Node中并不是一个完全平滑的路径,因为它与当前系统冲突。 然而,对齐的能力是非常重要的,Node正在努力提供解决方案。 如果您想了解更多信息,Gil Tayar 就此话题写了一篇很棒的文章。
改进了诊断追踪
Node 10 添加了跟踪事件,为开发人员提供更多关于其Node.js应用程序可见性。 这种新的功能可以提供有关时间和性能问题的改进指标。 API 允许用户在运行时打开或关闭事件,从而可以根据需要诊断问题。
在启动 node 应用时,添加参数 --trace-event-categories
可以将其打开,可以文档里了解到更多。
配备npm 6
npm最近从v5.7升级到v6.0,并且Node 10将立即提供更新。npm的这一版本增加了所有各种改进,包括性能,安全性和稳定性。 在他们的博客上了解更多关于npm v6的信息。
升级到OpenSSL 1.1.0版
Node配备了现代加密支持,可支持备受期待的 ChaCha20 密码和 Poly1305 验证器。 TLS 1.3最近已完成定稿,待 Node.js v10 在10月份发布 LTS 时,它将会完全支持该标准。
fs 也可以有 promise
与文件系统交互是许多 Node 应用程序的主要组成部分,Node 10将承诺发行fs包的实验版本。 以前这些函数通过回调处理异步操作,但可以使用Node 8附带的util.promisify()
函数进行转换。现在,开发人员可以在不需要额外步骤的情况下使用带有promise的fs。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。