2020年Node.js將會有哪些新功能

做者:David Nealjavascript

翻譯:瘋狂的技術宅前端

原文:developer.okta.com/blog/2019/1…java

未經容許嚴禁轉載node

2019 年是 Node.js 誕生的第 10 個年頭,npm 上可用的包數量超過了 100 萬。 Node.js 自己的下載量也在持續增加,同比增加了 40%。另外一個重要的里程碑是 最近 Node.js加入了 OpenJS 基金會,該基金會承諾改善項目的情況和可持續性,並改善與整個 JavaScript 社區的協做。webpack

正如你所見到的那樣,在短期內發生了不少事情!Node.js 社區仍在蓬勃發展,即使是到了 2020 年仍然沒有放緩的跡象。git

下一個Node.js 的主要版本正在探索更多有趣的功能。在本文中,我將探討 Node.js 社區在 2020 年值得期待的一些最重要的更新。github

What's New for Node.js in 2020

Node.js 13 中有什麼新功能?

在撰寫本文時 Node.js 的最新版本是 13。已經有了不少功能和更新,能夠在 2020 年以前開始試用。如下是一些要點:web

  • ECMAScript 模塊
  • WebAssembly支持
  • 診斷報告
  • 對日期、時間、數字和貨幣格式的全面國際化支持
  • 對 QUIC 協議的支持
  • V8 JavaScript 引擎性能更新

在深刻探討這些細節以前,先看一下咱們對 Node.js 發佈時間表的指望。npm

2020 年的 Node.js 發佈進程

每六個月發佈一次新的 Node.js 主要版本,發佈時間分別是四月和十月。其涉及到的主要版本被稱爲當前 版本。在撰寫本文時 Node.js 的當前版本是 13,它於 2019 年 10 月份發佈。json

每一年的10月發佈編號爲奇數的版本(例如 v9,v11 和 v13),其壽命很短,所以不適合生產環境。你能夠認爲奇數版本是 beta 版本。它們被用於測試 Node.js 的下一個偶數版本中的新功能和更改。

偶數版本(例如 v8,v10 和 v12)於每一年 4 月發佈。在發佈以後,上一個奇數版本將會中止更新。儘管它比奇數版本更穩定,但在接下來的六個月中將會繼續積極開發。能夠將前六個月視爲「發佈候選」階段。

一旦偶數版本通過六個月的考驗,將會進入一個新的階段,被稱爲「長期支持」(LTS)。 LTS 階段被認爲能夠投入生產。在接下來的 12 個月中,LTS 版本將會進行錯誤修復、安全更新和其餘的一些改進,目的是不破壞任何現有程序。

在 LTS 以後,有一個最後的「維護」階段。在維護期間 Node.js 版本將會只接收 關鍵 錯誤和安全修復程序。在維護階段持續 18 個月後,會被視爲壽命終止(EOL),而且再也不受到支持。

Node.js版本生命週期

預期的 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 進入維護

![2020 年 Node.js 新功能發佈時間表](

Node.js 2020 New Feature Release Schedule
)

注意:因爲Node 8.x 的生命週期(EOL)依賴於 OpenSSL-1.0.2, OpenSSL-1.0.2 的生命週期在 2019年末結束,因此計劃將Node 8.x 的 EOL 定於2019年末。你應該開始計劃將 8.x 程序遷移到 10.x 或 12.x 了。

對ECMAScript模塊的支持

從 v13.2.0 開始,Node.js 既支持傳統的 CommonJS 模塊,也支持新的標準 ECMAScript(ES)模塊。這意味着你最終可以使用可能已經可以在瀏覽器中使用的 importexport 語法。另外請務必注意,默認狀況下 Node.js 中的 ES 模塊啓用了 JavaScript 嚴格模式,你沒必要在每一個文件的開始都指定 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 能夠導入 W​​ebAssembly 模塊

除了 ES 模塊支持以外,還能夠導入 W​​ebAssembly(Wasm)模塊! 這是一種可移植的已編譯二進制格式,具備 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 );
} )();
複製代碼

也能夠用 Node.js 中新的動態 import() 語句進行導入。

"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 被設計爲用於對基礎系統(例如主機應用,操做系統等)進行調用的標準接口。

Node.js 項目對 WASI 的支持已經在最近提交。 WASI 可能會是另外一個可以在 2020 年看到的使人興奮的功能!

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 是一個成熟且流行的全球化庫。包括支持格式化數字、日期、時間和貨幣,可以執行時間計算和字符串比較,還有 Unicode 和其餘字符集之間轉換文本的功能。

2020 年 Node.js 的其餘更新

  • **QUIC 協議支持:**一種現代傳輸方式,具備加強的性能和可靠性。
  • **更好的 Python 3 構建支持:**在 2020 年,應該能夠用 Python 3 構建 Node.js 和本機模塊。
  • 更新的 V8 JavaScript 引擎: V8 的 7.8 和 7.9 版本提升了性能並支持 Wasm。
  • 穩定的 Workers Threads API: Node.js 中的 Worker 線程可以支持並行的、佔用大量 CPU 的 JavaScript 操做。

瞭解有關 Node.js,JavaScript 和安全性的更多信息

本文只是開始拉開了 2020 年改進 Node.js 的全部艱苦工做的序幕!若是你有興趣隨時瞭解最新的更新或想要以某種方式參與其中,請在 Node.js 官網查看爲 Node.js 作出貢獻的方式

歡迎關注前端公衆號: 前端先鋒,免費領取webpack從入門到進階全系列教程。

相關文章
相關標籤/搜索