符合预期的CoyPan
CoyPan,BAT某厂符合预期的FE,正努力成为一名出色的工程师
原文地址:https://developer.okta.com/blog/2019/12/04/whats-new-nodejs-2020
原文标题:What’s New for Node.js in 2020
2019年,Node.js已经10岁了,npm上的可用包数量超过了100万个。Node.js本身的下载量继续上升,同比增长40%。另一个重要的里程碑是Node.js最近加入了OpenJS基金会,该基金会承诺改善项目的健康和可持续性,并改善与整个JavaScript社区的协作。
正如你所看到的,短时间内发生了很多的事情。Node.js社区每年都有增长势头,2020年也没有放缓的迹象。
在Node.js的下一个主要版本中,有许多有趣的特性正在研究中。在这篇文章中,我将探讨Node.js社区在2020年可以期待的一些最重要的更新。
Node.js v13中的新特性
在撰写本文时,Node.js的最新版本是13。我们已经有很多功能和更新可以在2020年之前开始使用。以下是一系列亮点:
- ES模块支持
- WebAssembly支持
- 诊断报告
- 对日期、时间、数字和货币格式的全面国际化支持
- QUIC协议支持
- V8引擎优化
在深入了解这些更新的详细信息之前,让我们先看看Node.js的发布计划。
2020年Node.js发布节奏
Node.js每六个月发布一个新的主要版本,一个在10月,一个在4月。此主要版本称为Current版本。截至本文撰写之时,Node.js的Current版本为13,于2019年10月发布。
奇数版本(如v9、v11和v13)每年10月发布,生命周期很短,不建议投入到生产环境。你可以认为奇数版本是测试版。它们是为测试新特性和Node.js下一个偶数版本的更改而设计的。
偶数版本(如v8、v10和v12)每年4月发布。发布后,以前的奇数版本将停止接收更新。虽然它比奇数版本更稳定,但在未来六个月内仍将积极开发。你可以把前六个月看作是一个发布候选阶段。
一旦一个偶数版本维护超过六个月,它就进入了一个新的生命阶段,称为长期支持(LTS)。LTS阶段被视为生产准备阶段。在接下来的12个月中,LTS版本以不破坏任何现有应用程序的目的接收bug修复、安全更新和其他改进。
在LTS之后,有一个最后的Maintenance阶段。在Maintenance过程中,Node.js版本只会收到严重的错误和安全修复。Maintenance为期18个月。经过18个月的Maintenance,它被视为寿命结束(EOL),不再受支持。
2020年预计发布时间表
我们预计在2020年会看到以下的发布时间表。
2020年一月到三月
- 13.x 是Current版本,正在积极研发中。
- 10.x 和 12.x 是LTS版本。
2020四月
- 14.x 发布 ,成为 Current 版本。
- 14.x 发布后,13.x的工作将停止。
- 10.x 进入Maintenance阶段。
2020十月
- 15.x 发布 ,成为 Current 版本。
- 14.x 进入 LTS。
- 12.x 进入Maintenance阶段。
注:由于节点8.x的生命周期结束(EOL)依赖于OpenSSL-1.0.2,因此计划在2019年底结束,OpenSSL-1.0.2也计划在2019年底结束。如果你还没有准备好,请计划将8.x应用程序迁移到10.x或12.x。
支持ES Modules
从v13.2.0开始,Node.js支持传统的CommonJS模块和新的标准ECMAScript(ES)模块。这意味着你可以像浏览器端JavaScript代码一样,在Node.js中使用导入和导出语法,。另外,需要注意的是Node.js中的ES模块在默认情况下启用了JavaScript strict模式,因此不必在每个文件的顶部指定“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支持引入WebAssembly模块
除了支持ES模块外,还可以导入WebAssembly(Wasm)模块!WebAssembly模块是一种可移植的编译二进制格式,可以比JavaScript更快地解析并以本机速度执行。WebBaseMead模块可以使用诸如C/C++、GO、C#、Java、Python、Elixir, Rust等语言来创建。
到本文撰写时,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语句导入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年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(Unicode的国际组件)进行编译。ICU是一个成熟而流行的全球化图书馆。在许多特性中,ICU包括对格式化数字、日期、时间和货币、执行时间计算和字符串比较以及在Unicode和其他字符集之间转换文本的支持。
2020年Node.js的其他更新
- QUIC协议支持:一种用于连接应用程序的现代传输协议,具有更高的性能和可靠性。
- 更好的Python3构建支持:到2020年,应该可以使用Python3构建Node.js和本机模块。
- 更新的V8 JavaScript引擎:V8 v7.8和7.9提高了性能并支持Wasm。
- 稳定的worker线程API: Node.js中的worker线程支持并行的、CPU密集型JavaScript操作。
了解更多关于Node.js, JavaScript, 安全
这篇文章只是为2020年的Node.js发展起到一个抛砖引玉的作用!如果你有兴趣随时了解最新的更改或以某种方式参与其中,在Node.js网站上有一个对Node.js做出贡献的方法列表。
完。
符合预期的CoyPan
CoyPan,BAT某厂符合预期的FE,正努力成为一名出色的工程师