为了账号安全,请及时绑定邮箱和手机立即绑定

【译】Node.js 2020年的新特性

符合预期的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年可以期待的一些最重要的更新。

What's New for Node.js in 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),不再受支持。

Node.js Version Lifecycle

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阶段。

Node.js 2020 New Feature Release Schedule

注:由于节点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,正努力成为一名出色的工程师

点击查看更多内容
2人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消