专栏首页程序员成长指北Node.js 在 2020 年有什么新东西

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

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 的发布计划

每 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 file
async function sendMessage { ... }
export { sendMessage };
// index file
import { 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 做出贡献的方法列表。

译自《What's New for Node.js in 2020》

本文分享自微信公众号 - 程序员成长指北(coder_growth),作者:译(原文见底部)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Babel还是Node开发的“必需品”吗?

    现在做 Node 开发还需要“麻烦”的 Babel 吗?毋庸置疑,Babel 曾经对构建和开发 Node.js 应用程序有过很大的影响,但随着 Node.js ...

    coder_koala
  • 来,告诉你Node.js究竟是什么?

    如果你有一定的前端基础,比如 `HTML、CSS、JavaScript、jQuery;那么,Node.js 能让你以最低的成本快速过渡成为一个全栈工程师(我称这...

    coder_koala
  • 你觉得Node.js是单线程这个结论对吗?

    一提到 Node.js ,我想大家都会想到它的一个特点,单线程。但是 Node.js 在运行的时候依赖 V8 这个宿主环境,难道在宿主环境中也是单线程吗?请看正...

    coder_koala
  • 2020 年 Node.js 将会有哪些新功能[每日前端夜话0xFA]

    2019 年是 Node.js 诞生的第 10 个年头,npm 上可用的包数量超过了 100 万。Node.js 本身的下载量也在持续增长,同比增长了 40%。...

    疯狂的技术宅
  • 10最好用的Node.js工具、插件和资料库

    每一个称职的程序员都应该拥有一套极好的工具来提高自己的工作效率。在Livecoding.tv 上,那里的程序员分享了10个他们认为是最好用的工具、插件和资料库。...

    LiveEdu
  • node.js基本工作原理及流程

    概述 Node.js是什么 Node 是一个服务器端 JavaScript 解释器,用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动,...

    xiangzhihong
  • Node.js原理

    概述 Node.js是什么 Node 是一个服务器端 JavaScript 解释器,用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动,...

    xiangzhihong
  • 从零学习开源项目系列(三) CSBattleMgr服务源码研究

    如上图所示,这篇文章我们将介绍CSBattleMgr的情况,但是我们不会去研究这个服务器的特别细节的东西(这些细节我们将在后面的文章中介绍)。阅读一个未知的项目...

    范蠡
  • forever使用

    1.启动程序 forever start server.js 2.启动程序指定信息输出文件(默认为~/.forever/forerver.log) fore...

    苦咖啡
  • 【灵魂拷问】你为什么要来学习Node.js呢?

    Node是一种新技术,诞生于2009年,经过几年的变化,Node.js生态圈以及逐渐走向了稳定,不少开发者入门时,总是要经历一种思维的转变,但是学会Node.j...

    达达前端

扫码关注云+社区

领取腾讯云代金券