以代号“Dubnium”为表明的Node 10于2018年4月24日发布,并将于2018年10月进入长期支持(LTS)。JavaScript开发人员一直在激动地等待今天,今天咱们来看看这个版本带来的新特征。html
如今,Node中的错误信息已被标准化。node
在Node环境中,处理错误信息一直是一个痛苦的工做。 之前,它们只包含一个没有其余标识符关联的字符串消息。 若是开发人员但愿程序根据特定消息采起调试操做,惟一的办法是对错误内容进行字符串比较。git
因为错误信息的处理须要精确的字符串匹配,所以即便对消息的最小更新也没法添加到下一个主要节点版本,以便它不会中断SemVer。 经过将错误从消息中解耦出来,它将使开发人员更轻松地工做,并容许Node在不引入重大更改的状况下改进错误消息。 要了解更多信息,请阅读Michael Dawson的文章节点错误代码。npm
Node文档将N-API描述为构建本地插件的API。 它独立于底层的JavaScript运行时(ex V8),并做为Node.js自己的一部分进行维护。 这个API将是跨Node.js版本稳定的应用程序二进制接口(ABI)。 它旨在将Addons与基础JavaScript引擎中的更改隔离,并容许为一个版本编译的模块在更高版本的Node.js上运行,而无需从新编译。api
以前在Node 8中实验性地引入了N-API,并将从Node 10开始稳定。在Node版本之间升级再也不会引发模块损坏。 它也将向后移植以实现Node.js v6.x和v8.x的兼容性。promise
Node 8 引入了一个实验性的 HTTP/2 模块,此次是对 Node 的一次很好的升级。 HTTP/2 改进了标准的 HTTP 协议:浏览器
多路复用
单一链接
服务器推送
优先级
头压缩
脱离实验阶段后,原生的 HTTP/2 模块将有助于改进节点服务器和它们提供的Web体验。安全
Node 中止使用 Chromium 中的 V8 JavaScript引擎,而且 Node.js v10 使用了最新版本的V8 引擎。 对于浏览器而言,Chrome 66 提供的V8 Engine v6.6在JavaScript的解析和编译时间方面能够减小约20-40%。 所以,咱们能够预期 Node 10 也会在这方面有更大的收益。 并且它还提供异步生成器和阵列性能改进。服务器
速度才是最重要的,最新的版本并不会让人失望。 查看V8团队的文章以了解更多信息。异步
// 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最近从v5.7升级到v6.0,而且Node 10将当即提供更新。npm的这一版本增长了全部各类改进,包括性能,安全性和稳定性。 在他们的博客上了解更多关于npm v6的信息。
Node配备了现代加密支持,可支持备受期待的 ChaCha20 密码和 Poly1305 验证器。 TLS 1.3最近已完成定稿,待 Node.js v10 在10月份发布 LTS 时,它将会彻底支持该标准。
与文件系统交互是许多 Node 应用程序的主要组成部分,Node 10将承诺发行fs包的实验版本。 之前这些函数经过回调处理异步操做,但可使用Node 8附带的util.promisify()
函数进行转换。如今,开发人员能够在不须要额外步骤的状况下使用带有promise的fs。