Node.js 在 2020 年有什么新东西

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


Node.js 在 2020 年有什么新东西


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


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),不再进行支持。


预计 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 进入维护


注:由于 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"。


// message fileasync function sendMessage { ... }export { sendMessage };// index fileimport { sendMessage } from "./message";

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


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


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


{"type": "module"}

还有一种方法,在根 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 时传递命令行参数。例如:


node --experimental-wasm-modules index.js

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


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() 语句导入 WebAssembly 模块。


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

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

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

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(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 做出贡献的方法列表。

而这里,可以满足你对知识的渴望!无论你是应届毕业生,还是未从事过IT行业的社会人员,亦或是IT从业者。只要你对目前的薪资不满、对现状不满、对生活迷茫,不如来学习!

搜索爱创课堂,找源哥领取


分享到:


相關文章: