Node 2020年新增功能

十二月 08, 2019

在2019年,Node.js成立10周年了,可用的软件包数量npm超过了100万。Node.js本身的下载量继续增长,同比增长40%。另一个重要的里程碑是Node.js最近加入了OpenJS基金会,该基金会承诺改善项目的健康状况和可持续性,并改善与整个JavaScript社区的协作。如您所见,在相对较短的时间内发生了很多事情!每年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发布过程

每六个月发布一次Node.js的新主要版本,一个十月发布,一个四月发布。该主要版本称为当前版本。撰写本文时,Node.js 的当前版本为13,于2019年10月发布。
编号为奇数的版本(例如v9,v11和v13)于每年的十月发布,寿命很短,因此不适合生产。您可能会认为奇数版本是Beta版本。它们设计用于测试导致Node.js的下一个偶数版本的新功能和更改。
偶数版本(例如v8,v10和v12)于每年四月发布。发布后,以前的奇数版本将停止接收更新。尽管比奇数版本更稳定,但它将在接下来的六个月中继续积极开发。您可以将前六个月视为发布候选阶段。
一旦偶数版本有六个月的持续使用时间,它将进入一个新的生命阶段,称为长期支持(LTS)。LTS阶段被认为可以投入生产。在接下来的12个月中,LTS版本将收到错误修复,安全更新和其他改进,目的是不破坏任何现有应用程序。
LTS之后,有最后的维护阶段。在维护期间,Node.js版本将仅收到严重的错误和安全修复程序。维护阶段持续18个月。维护18个月后,它被视为报废(EOL),并且不再受支持。
life

预计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 2020新功能发布时间表

注意:节点8.x生命周期终止(EOL)由于其对OpenSSL-1.0.2的依赖关系而计划于2019年底进行,而ESSL也计划于2019年底进行生命周期终止。 ,计划将8.x应用程序迁移到10.x或12.x。

支持ECMAScript模块

从v13.2.0开始,Node.js既支持传统的CommonJS模块又支持新的标准ECMAScript(ES)模块。这意味着您最终可以为浏览器中运行的客户端JavaScript 使用import和export可能已经使用的语法。另外,请务必注意,Node.js中的ES模块默认情况下启用了JavaScript 严格模式,因此您不必”use strict”;在每个文件的顶部进行指定。

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

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

但是,您仍然需要做一些工作以使Node.js知道您正在使用ES模块。两种最常用的方法是使用.mjs文件扩展名或”type”: “module”在最近的父package.json文件中指定。

选项1:将.js文件重命名为.mjs文件。
选项2:更新根package.json文件,或将a添加package.json到包含ES模块的文件夹中,并指定typeas module。

{
   "type": "module"
}

另一种可能性是在根package.json文件中启用ES模块,然后重命名所有CommonJS模块文件以使用.cjs扩展名。

就个人而言,我发现.mjs和.cjs扩展有点麻烦,因此很高兴看到有一些方法可以指定package.json文件使用ES和CommonJS模块。

Node.js可以导入W​​ebAssembly模块

除了ES模块支持之外,还可以导入W​​ebAssembly(Wasm)模块!WebAssembly模块是一种可移植的已编译二进制格式,可以比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 );
} )();

也可以使用import()Node.js中的新动态语句导入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在设计时考虑到安全性,以防止访问任何底层操作系统(有时称为“沙盒”)。但是,有时,Node.js中控件中的WebAssembly模块可能会受益于能够进行系统级调用。

这是新的WebAssembly系统接口(WASI)出现的地方。WASI被设计为用于对基础系统(例如主机应用程序,本机操作系统等)进行调用的标准接口。

最初对WASI的支持已提交给Node.js项目。WASI是我们可能会在2020年看到的另一个令人兴奋的功能!

诊断报告将于2020年发布

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

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

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

国际化支持在2020年扩大

从v13.x开始,Node.js带有完整的ICU(Unicode国际组件)进行编译。ICU是成熟且流行的全球化库。在许多功能中,ICU支持以下格式的设置:格式化数字,日期,时间和货币,执行时间计算和字符串比较以及在Unicode和其他字符集之间转换文本。

2020年的其他Node.js更新

翻译自: What’s New for Node.js in 2020