2020年Node.js将会有哪些新功能

做者:David Nealjavascript

翻译:疯狂的技术宅前端

原文:developer.okta.com/blog/2019/1…java

未经容许严禁转载node

2019 年是 Node.js 诞生的第 10 个年头,npm 上可用的包数量超过了 100 万。 Node.js 自己的下载量也在持续增加,同比增加了 40%。另外一个重要的里程碑是 最近 Node.js加入了 OpenJS 基金会,该基金会承诺改善项目的情况和可持续性,并改善与整个 JavaScript 社区的协做。webpack

正如你所见到的那样,在短期内发生了不少事情!Node.js 社区仍在蓬勃发展,即使是到了 2020 年仍然没有放缓的迹象。git

下一个Node.js 的主要版本正在探索更多有趣的功能。在本文中,我将探讨 Node.js 社区在 2020 年值得期待的一些最重要的更新。github

What's New for Node.js in 2020

Node.js 13 中有什么新功能?

在撰写本文时 Node.js 的最新版本是 13。已经有了不少功能和更新,能够在 2020 年以前开始试用。如下是一些要点:web

  • ECMAScript 模块
  • WebAssembly支持
  • 诊断报告
  • 对日期、时间、数字和货币格式的全面国际化支持
  • 对 QUIC 协议的支持
  • V8 JavaScript 引擎性能更新

在深刻探讨这些细节以前,先看一下咱们对 Node.js 发布时间表的指望。npm

2020 年的 Node.js 发布进程

每六个月发布一次新的 Node.js 主要版本,发布时间分别是四月和十月。其涉及到的主要版本被称为当前 版本。在撰写本文时 Node.js 的当前版本是 13,它于 2019 年 10 月份发布。json

每一年的10月发布编号为奇数的版本(例如 v9,v11 和 v13),其寿命很短,所以不适合生产环境。你能够认为奇数版本是 beta 版本。它们被用于测试 Node.js 的下一个偶数版本中的新功能和更改。

偶数版本(例如 v8,v10 和 v12)于每一年 4 月发布。在发布以后,上一个奇数版本将会中止更新。尽管它比奇数版本更稳定,但在接下来的六个月中将会继续积极开发。能够将前六个月视为“发布候选”阶段。

一旦偶数版本通过六个月的考验,将会进入一个新的阶段,被称为“长期支持”(LTS)。 LTS 阶段被认为能够投入生产。在接下来的 12 个月中,LTS 版本将会进行错误修复、安全更新和其余的一些改进,目的是不破坏任何现有程序。

在 LTS 以后,有一个最后的“维护”阶段。在维护期间 Node.js 版本将会只接收 关键 错误和安全修复程序。在维护阶段持续 18 个月后,会被视为寿命终止(EOL),而且再也不受到支持。

Node.js版本生命周期

预期的 2020 年发行时间表

咱们应该指望可以在 2020 年看到如下发布时间表。

2020 年 1 月 ~ 3 月

  • 13.x 是当前版本,而且正在积极开发中
  • 10.x 和 12.x 是LTS

2020 年 4 月

  • 14.x 发布并成为当前版本
  • 14.x 版本发布后 13.x 的相关工做当即中止
  • 10.x 进入维护

2020 年 10 月

  • 15.x 发布并成为当前版本
  • 14.x 进入LTS
  • 12.x 进入维护

![2020 年 Node.js 新功能发布时间表](

Node.js 2020 New Feature Release Schedule
)

注意:因为Node 8.x 的生命周期(EOL)依赖于 OpenSSL-1.0.2, OpenSSL-1.0.2 的生命周期在 2019年末结束,因此计划将Node 8.x 的 EOL 定于2019年末。你应该开始计划将 8.x 程序迁移到 10.x 或 12.x 了。

对ECMAScript模块的支持

从 v13.2.0 开始,Node.js 既支持传统的 CommonJS 模块,也支持新的标准 ECMAScript(ES)模块。这意味着你最终可以使用可能已经可以在浏览器中使用的 importexport 语法。另外请务必注意,默认状况下 Node.js 中的 ES 模块启用了 JavaScript 严格模式,你没必要在每一个文件的开始都指定 use strict

// message file
async function sendMessage { ... }
export { sendMessage };

// index file
import { sendMessage } from "./message";
复制代码

可是为了使 Node.js 知道正在使用 ES 模块,你仍然须要作一些工做。最多见的两种方法是使用 .mjs 文件扩展名,或者在最近的父 package.json 文件中指定 "type":"module"

  • **选项1:**将 .js 文件重命名为 .mjs 文件。
  • **选项2:**更新根 package.json 文件,或者把 package.json 添加到包含 ES 模块的目录中,并将 type 指定为 module
{
   "type": "module"
}
复制代码

另外一种可能性是在根 package.json 文件中启用 ES 模块,而后重命名全部 CommonJS 模块文件来使用 .cjs 扩展名。

我我的以为 .mjs.cjs 扩展名比较粗略,因此我很乐意看到有一些方法能够经过 package.json 文件去指定 ES 和 CommonJS 模块的用法。

Node.js 能够导入 W​​ebAssembly 模块

除了 ES 模块支持以外,还能够导入 W​​ebAssembly(Wasm)模块! 这是一种可移植的已编译二进制格式,具备 JavaScript 更快的解析速度,并可以以本机速度执行。可使用 C/C++、Go、C#、Java、Python、Elixir、Rust 等语言去建立 WebAssembly 模块。

在撰写本文时,WebAssembly 模块支持仍处于试验阶段。要启用此功能,须要在执行 Node.js 程序时传递命令行标志。例如:

node --experimental-wasm-modules index.js
复制代码

假设你有一个实现为 WebAssembly 模块的图像处理库。使用此 Wasm 模块的语法以下所示。

import * as imageUtils from "./imageUtils.wasm";
import * as fs from "fs";
( async () => {
   const image = await fs.promises.readFile( "./image.png" );
   const updatedImage = await imageUtils.rotate90degrees( image );
} )();
复制代码

也能够用 Node.js 中新的动态 import() 语句进行导入。

"use strict";
const fs = require("fs");
( async () => {
   const imageUtils = await import( "./imageUtils.wasm" );
   const image = await fs.promises.readFile( "./image.png" );
   const updatedImage = await imageUtils.rotate90degrees( image );
} )();
复制代码

WebAssembly 系统接口(WASI)

与 JavaScript 类似,WebAssembly 在设计时就考虑到了安全性问题,以防止任何对底层操做系统的访问(有时称为“沙盒”)。但有时 Node.js 中的 WebAssembly 模块可能会由于可以进行系统级调用而受益。

因此就出现了新的 WebAssembly 系统接口(WASI)。WASI 被设计为用于对基础系统(例如主机应用,操做系统等)进行调用的标准接口。

Node.js 项目对 WASI 的支持已经在最近提交。 WASI 可能会是另外一个可以在 2020 年看到的使人兴奋的功能!

2020 年发布诊断报告

诊断报告是可以供人类阅读的 JSON 格式的过程信息摘要,其中包括调用栈、操做系统信息、已加载的模块以及可以帮助支持应用程序的其余有用的数据。这些报告可以在未处理的异常、致命错误、进程信号或使用新的 process.report API 时触发。能够在 Node.js 中配置诊断报告,并以指定的文件名保存到文件夹中。

在撰写本文时,诊断报告仍然处于实验阶段。要启用此功能,须要在执行 Node.js 程序时传递命令行标志:

node --experimental-report --report-uncaught-exception --report-filename=./diagnostics.json index.js
复制代码

国际化支持将在 2020 年扩展

从 v13.x 开始,Node.js 带有完整的 ICU(Unicode 的国际化组件)。 ICU 是一个成熟且流行的全球化库。包括支持格式化数字、日期、时间和货币,可以执行时间计算和字符串比较,还有 Unicode 和其余字符集之间转换文本的功能。

2020 年 Node.js 的其余更新

  • **QUIC 协议支持:**一种现代传输方式,具备加强的性能和可靠性。
  • **更好的 Python 3 构建支持:**在 2020 年,应该能够用 Python 3 构建 Node.js 和本机模块。
  • 更新的 V8 JavaScript 引擎: V8 的 7.8 和 7.9 版本提升了性能并支持 Wasm。
  • 稳定的 Workers Threads API: Node.js 中的 Worker 线程可以支持并行的、占用大量 CPU 的 JavaScript 操做。

了解有关 Node.js,JavaScript 和安全性的更多信息

本文只是开始拉开了 2020 年改进 Node.js 的全部艰苦工做的序幕!若是你有兴趣随时了解最新的更新或想要以某种方式参与其中,请在 Node.js 官网查看为 Node.js 作出贡献的方式

欢迎关注前端公众号:前端先锋,免费领取 webpack 从入门到进阶全系列教程。

相关文章
相关标签/搜索