02.05 Node.js 已经 10 岁了,那么 Node.js 将在 2020 年带来什么特性

2019 年,Node.js 已经10岁了,而 NPM 上可用的包数量也超过了 100 万个。Node.js 本身的下载数也仍在上升,同比上年增长 40%。另一个重要的里程碑是 Node.js 最近加入了 OpenJS 基金会,该基金会承诺改善项目的健康度和可持续性,并加强与整个 JavaScript 社区的协作。

如你所见,在短时间内发生了很多事情!Node.js 社区每年都有增长势头,2020 年没有丝毫放缓的迹象。在 Node.js 的下一个主要版本中,正在研究许多有趣的特性。在本文中,将会探讨 Node.js 社区在 2020 年值得期待的一些重要更新。

Node.js 已经 10 岁了,那么 Node.js 将在 2020 年带来什么特性

Node.js

Node.js 13 有什么新功能?

在本文成文时最新版本是 Node.js 13,有很多功能和更新可以在 2020 年之前开始使用,下面是一些亮点:

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

在详细了解这些更新之前,让我们先看看 Node.js 的发布计划。

2020 年 Node.js 的发布计划

每 6 个月发布一个新的 Major 版本,分别在 10 月和 4 月。此主要版本称为当前版本。截至本文撰写之时,Node.js 的当前版本为 13,于 2019 年 10 月发布。

奇数版本(如v9、v11、v13)每年 10 月发布,时间很短不被视为已准备好投入生产。可以认为奇数版本是测试版,为了测试新特性和引入 Node.js 下一个偶数版本的变更。

偶数版本(如v8、v10、v12)每年 4 月发布。发布后,以前的奇数版本将停止接收更新。虽然比奇数版本更稳定,但在未来 6 个月内仍将积极开发更新,可以把前 6 个月看作是一个发布候选期。

一旦一个偶数版本经过 6 个月,就进入了一个新的生命阶段,称为长期支持(LTS)。LTS 阶段可以被视为可以被应用于生产环境,在接下来的 12 个月中,LTS 版本以不破坏任何现有应用的目的进行 bug 修复、安全更新和其他改进。

在 LTS 之后,有一个最后的维护阶段。维护阶段为 18 个月,在此阶段中只会进行严重的错误和安全修复。经过 18 个月的维护,将被视为寿命结束(EOL),不再进行支持。

Node.js 已经 10 岁了,那么 Node.js 将在 2020 年带来什么特性

Node.js Version Lifecycle

预计 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 进入维护
Node.js 已经 10 岁了,那么 Node.js 将在 2020 年带来什么特性

Node.js 2020 New Feature

注:由于 8.x 的生命周期结束(EOL)依赖于 OpenSSL-1.0.2,因此计划在 2019 年底结束,OpenSSL-1.0.2 也计划在 2019 年底结束。如果你还没有准备好,请计划起来将 8.x 应用程序升级到 10.x 或 12.x。

支持 ECMAScript 模块

从 v13.2.0 开始,Node.js 将支持传统的 CommonJS 模块和新的 ECMAScript(ES) 标准模块。这意味着将可以使用 import 和 export 语法,您可能已经在浏览器中尝试过了。另外,需要注意的是 Node.js 中的 ES 模块在默认情况下启用了 JavaScript Strict 模式,因此不需要在每个文件的顶部指定 "use strict"。

<code>// message file

async function sendMessage { ... }

export { sendMessage };

// index file
import { sendMessage } from "./message";/<code>

但是,仍然需要额外做一些事情,让 Node.js 知道您正在使用 ES 模块。最常用的两种方法是使用 .mjs 文件扩展名或在最近的 package.json 中指定"type": "module"。

选项一:重命名 .js 文件为 .mjs 文件;

选项二:更新项目根 package.json,或者增加一个 package.json 到包含 ES 模块的目录来指定 type 和module;

<code>{"type": "module"}/<code>

还有一种方法,在根 package.json 文件中启用 ES 模块,然后重命名所有 CommonJS 文件为 .cjs 扩展名。

Node.js 可以导入 WebAssembly 模块

除了支持 ES 模块外,还可以导入 WebAssembly(Wasm)模块!WebAssembly 模块是一种可移植的二进制格式,可以比 JavaScript 更快地解析并以本机速度执行。WebAssembly 模块可以使用诸如 C/C++、Go、C#、Java、Python、Elixir、Rust 等语言来建构。

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

<code>node --experimental-wasm-modules index.js/<code>

下面是一个例子,假设有一个图像处理库为 WebAssembly 模块实现。使用这个 WebAssembly 模块的语法可能如下所示。

<code>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 );

} )();/<code>

还可以使用 Node.js 中新的动态 import() 语句导入 WebAssembly 模块。

<code>"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);
})();/<code>

WebAssembly系统接口(WASI)

与 JavaScript 类似,WebAssembly 在设计时亦考虑了安全性,以防止访问不被预期的底层操作系统。但是,在您可控的情况下有些时会受益于 WebAssembly 的能力,来进行一些系统级别的调用。

这就是新的 WebAssembly 系统接口(WASI),WASI 被设计成一个标准接口,用于调用底层系统,如主机应用程序、本机操作系统等。

最初的 WASI 支持最近被提交到 Node.js 项目。WASI 是 2020 年 Node.js 另一个激动人心的特性!

2020 将推出诊断报告

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

截至本文撰写之时,诊断报告仍在实验阶段。要启用此功能,必须在执行 Node.js 时传递命令行参数。例如:

<code>node --experimental-report --report-uncaught-exception --report-filename=./diagnostics.json index.js/<code>

2020 国际化支持将加大

从 v13.x 开始,Node.js 使用完整的 ICU(International Components for Unicode),ICU 是一个成熟而流行的全球化库。ICU 包括对格式化数字、日期、时间和货币、执行时间计算和字符串比较,以及在 Unicode 和其他字符集之间转换文本的支持。

2020 的其他 Node.js 更新

  • QUIC 协议支持:提供更高性能和可靠性的现代传输协议;
  • 更好的 Python 3 构建支持:到 2020 年,应该可以使用 Python3 构建 Node.js 和本机模块;
  • 更新的 V8 JavaScript 引擎:V8 v7.8 和 7.9 提高了性能和 Wasm 支持;
  • 稳定的 Worker Threads API:Node.js 中的 Worker Threads 支持并行与 CPU 密集型的 JavaScript 操作;

进一步了解 Node.js、JavaScript 和 安全性

这篇文章只是在 2020 年为改进 Node.js 所做的所有努力中的一个开始!如果您有兴趣随时了解最新的更改或以某种方式参与其中,Node.js 网站上有一个对 Node.js 做出贡献的方法列表。

关注我

大家好,这里是 FEHub,每天早上 9 点更新,为你严选优质文章,与你一起进步。

如果喜欢这篇文章,记得点赞,转发。让你的好基友和你一样优秀。

  • 感谢大家的支持
  • 吃饭时加个鸡腿
  • 咱们明天见  :) 

欢迎关注 「FEHub」,每天进步一点点

关于本文

译文:https://mp.weixin.qq.com/s/RGTjSaY_knfXMAgecPV5Ag

原文:https://developer.okta.com/blog/2019/12/04/whats-new-nodejs-2020


分享到:


相關文章: