您对2020年的Node.js有什么期望?

Node.js在2019年已经十岁了。 npm注册表中可用的软件包数量已超过100万个大关。 每年,Node.js平台本身的下载量都增加40%。 Node.js的另一个里程碑是该项目加入了OpenJS Foundation。 因此,我们可以期待该项目的状态和稳定性得到改善,并且总体上可以期待JavaScript社区成员之间的交互方面的积极发展。



显而易见,在短短的一年多时间内,Node.js领域发生了很多有趣的事情。 每年,Node.js都在发展。 我们没有理由在2020年依靠其他任何东西。

在Node.js的下一版本中,我们将发现许多有趣的功能。 该材料致力于平台可能在2020年出现的最重大创新。

创新Node.js 13


在撰写本文时,2019年12月开始,Node.js 13是该平台的最新版本。 已经有了许多新功能和改进,您可以使用它们进行实验,为新的一年做好准备。 以下是其中一些:

  • ECMAScript模块。
  • WebAssembly支持。
  • 诊断报告。
  • 全面支持国际化。 特别是,我们正在谈论日期,时间,数字,货币的格式。
  • 支持QUIC协议。
  • 改善V8 JavaScript引擎的性能。

在详细介绍这些功能之前,我们将讨论在新版本的Node.js发行版以及对已经发布的平台版本的支持方面可以期待的内容。

2020年发布新版本Node.js的过程


每6个月发布一次Node.js的新主要版本。 一个在十月,另一个在四月。 它们被称为“当前版本”。 在撰写本文时,Node.js的当前版本是第13版,于2019年10月发布。

带有奇数的版本(v9,v11,v13)于每年十月发布。 它们在相对较短的时间内就有意义,因此不认为它们可用于生产。 它们可以被认为是该平台的Beta版本。 它们旨在测试新功能和更改,这些功能和更改将以偶数形式落入下一版Node.js。

带有偶数编号的版本(v8,v10,v12)于每年四月发布。 在发布这样的版本之后,将停止发布先前的“偶数”版本的更新。 尽管这些版本比“奇数版本”要稳定得多,但对其进行的积极工作还要再进行6个月。 此时,可以认为它们处于释放候选状态。

在“偶数”版本在6个月内定稿之后,它进入了生命周期的新阶段,转为LTS版本(长期支持,长期支持)。 LTS版本的Node.js被认为可以在生产中使用。 在接下来的12个月中,将针对这些版本发布错误修复,安全更新和其他改进。 考虑到保留现有应用程序的可操作性,完成所有这些操作。

在LTS阶段之后,维护阶段开始。 此时仅发布关键的错误修复和安全更新。 陪同阶段持续18个月。 在这段时间过后,相应的版本将进入生命周期的末期(EOL,生命周期终止),并且不再受支持。


Node.js版本生命周期

2020年新版本Node.js的预期发布计划


到2020年,我们可以预期以下计划发布新版本的Node.js:

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进入维护阶段。


计划在2020年发布新版本的Node.js

请注意,Node.js 8生命周期的结束时间定于2019年底。 事实是,此版本的平台依赖于OpenSSL-1.0.2,并且此版本的OpenSSL的生命周期也将在2019年底结束。 计划将Node.js 8.x应用程序转换为Node.js 10.x或12.x(如果尚未这样做的话)。

ECMAScript模块


在13.2.0版中,Node.js同时支持CommonJS模块和新的标准ECMAScript模块(ES模块),而无需任何第三方工具。 这意味着开发人员最终可以使用importexport指令,与在JavaScript中创建前端项目时可能已经使用的importexport指令相同。 另外,必须注意,默认情况下,Node.js中的ES模块在严格模式下工作。 因此,要启用此模式,您无需在每个文件的开头添加"use strict";

 //  message async function sendMessage { ... } export { sendMessage }; //  index import { sendMessage } from "./message"; 

但是,为了通知Node.js开发人员正在使用ES模块,需要做一些事情。 在这里,您可以使用两种最常用的方法之一。 首先是为文件分配扩展名.mjs 。 第二个是最接近的父文件package.json放置了结构"type": "module"

第一种方法很清楚.mjs文件重命名为.mjs文件。 使用第二种方法时,在包含ES模块的文件夹中的根文件package.jsonpackage.json ,将type属性与value module一起添加:

 {   "type": "module" } 

与ES模块相关的另一种可能性是将它们包含在package.json项目的根文件中,并使用CommonJS模块将文件扩展名更改为.cjs

就个人而言,在我看来,使用.mjs.cjs并不是一个特别好的主意。 因此,我很高兴看到与ES模块一起使用就足以对package.json文件进行更改。

导入WebAssembly模块


Node.js现在不仅支持ES模块,而且支持WebAssembly模块(Wasm模块)的导入。 wasm模块是一个文件,其中包含可移植二进制格式的代码,该文件可以比类似的JavaScript代码更快地解析,并以类似于本机代码的速度执行。 通过开发诸如C / C ++,Go,C#,Java,Python,Elixir,Rust等语言的源代码可以创建Wasm模块。

对WebAssembly模块的支持仍处于试验阶段。 为了启用此功能,在启动应用程序时需要向Node.js传递一个特殊的命令行标志:

 node --experimental-wasm-modules index.js 

考虑一个例子。 假设我们有一个实现为Wasm模块的图像处理库。 要在JS代码中使用此类库,您可以执行以下操作:

 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()语句import() Node.js中的Wasm模块:

 "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系统界面


WebAssembly技术(例如JavaScript)在开发时就考虑到了安全性。 Wasm代码在安全的环境(有时称为沙箱)中运行。 这使您可以从此类代码保护运行该操作系统的操作系统。 但是,在某些情况下,在Node.js环境中运行的Wasm模块只能从进行系统调用的能力中受益。

这是WebAssembly系统界面(WebAssembly系统界面,WASI)进入场景的地方。 WASI被设计为访问运行Wasm代码的系统的标准接口。 这样的系统可以包括主机应用程序,操作系统等。

您可以在Node.js存储库中找到最近提交的内容 ,其中介绍了最初的WASI支持。 实际上,WebAssembly系统界面是Node.js有趣的功能之一,其外观有望在2020年实现。

诊断报告支持


诊断报告是旨在供人们使用的JSON文档,其中包含有关软件机制操作的信息。 此类信息可能包括函数调用堆栈,有关操作系统的信息,已加载模块上的数据以及旨在帮助支持应用程序的其他有用指示符。 当发生未处理的异常,严重错误时,可以创建类似的报告。 它们可以由来自流程的信号生成,也可以使用新的process.report API生成。 可以配置Node.js,以便使用指定的文件名将诊断报告保存在指定的文件夹中。

现在,此功能是实验性的。 要启用它,您需要在启动应用程序时向Node.js传递一个特殊标志:

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

扩展对国际化的支持


Node.js 13.x包含ICU( Unicode的国际组件 )库的完整版本。 ICU是一个成熟的流行项目。 在该库的许多功能中,可以注意到对格式化数字,日期,货币和以本地化格式输出的时间的支持。 她能够执行与时间间隔有关的计算,能够比较字符串并将文本从Unicode转换为其他编码,反之亦然。

Node.js的其他一些新功能


以下是Node.js的一些更有趣的功能,其外观有望在2020年实现:

  • 支持QUIC协议。 QUIC是一种现代Internet协议,您可以使用它在应用程序之间建立可靠而高效的通信。
  • 改进了对Python 3的支持。到2020年,我们应该能够使用Python 3构建Node.js模块和本机模块。
  • JS引擎V8的更新版本。 V8引擎的7.8和7.9版本将提供更高的应用程序性能和Wasm支持。
  • 稳定的API工作线程。 Worker Threads API使您可以并行化密集型计算。

亲爱的读者们! 您最期待2020年的Node.js平台如何?


Source: https://habr.com/ru/post/zh-CN479270/


All Articles