02.05 Node.js 已經 10 歲了,那麼 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 已經 10 歲了,那麼 Node.js 將在 2020 年帶來什麼特性

Node.js

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),不再進行支持。

Node.js 已經 10 歲了,那麼 Node.js 將在 2020 年帶來什麼特性

Node.js Version Lifecycle

預計 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 進入維護
Node.js 已經 10 歲了,那麼 Node.js 將在 2020 年帶來什麼特性

Node.js 2020 New Feature

注:由於 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"。

<code>// message file

async function sendMessage { ... }

export { sendMessage };

// index file
import { sendMessage } from "./message";/<code>

但是,仍然需要額外做一些事情,讓 Node.js 知道您正在使用 ES 模塊。最常用的兩種方法是使用 .mjs 文件擴展名或在最近的 package.json 中指定"type": "module"。

選項一:重命名 .js 文件為 .mjs 文件;

選項二:更新項目根 package.json,或者增加一個 package.json 到包含 ES 模塊的目錄來指定 type 和module;

<code>{"type": "module"}/<code>

還有一種方法,在根 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 時傳遞命令行參數。例如:

<code>node --experimental-wasm-modules index.js/<code>

下面是一個例子,假設有一個圖像處理庫為 WebAssembly 模塊實現。使用這個 WebAssembly 模塊的語法可能如下所示。

<code>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 );

} )();/<code>

還可以使用 Node.js 中新的動態 import() 語句導入 WebAssembly 模塊。

<code>"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);
})();/<code>

WebAssembly系統接口(WASI)

與 JavaScript 類似,WebAssembly 在設計時亦考慮了安全性,以防止訪問不被預期的底層操作系統。但是,在您可控的情況下有些時會受益於 WebAssembly 的能力,來進行一些系統級別的調用。

這就是新的 WebAssembly 系統接口(WASI),WASI 被設計成一個標準接口,用於調用底層系統,如主機應用程序、本機操作系統等。

最初的 WASI 支持最近被提交到 Node.js 項目。WASI 是 2020 年 Node.js 另一個激動人心的特性!

2020 將推出診斷報告

診斷報告是人類可讀的 JSON 格式的進程信息摘要,包括調用堆棧、操作系統信息、加載的模塊和其它可以幫助應用程序的有用數據。這些報告可以在未處理的異常、致命錯誤、進程信號或使用新的 process.report API 時觸發。Node.js 可以配置將診斷報告保存到指定的文件夾和文件名。

截至本文撰寫之時,診斷報告仍在實驗階段。要啟用此功能,必須在執行 Node.js 時傳遞命令行參數。例如:

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

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 做出貢獻的方法列表。

關注我

大家好,這裡是 FEHub,每天早上 9 點更新,為你嚴選優質文章,與你一起進步。

如果喜歡這篇文章,記得點贊,轉發。讓你的好基友和你一樣優秀。

  • 感謝大家的支持
  • 吃飯時加個雞腿
  • 咱們明天見  :) 

歡迎關注 「FEHub」,每天進步一點點

關於本文

譯文:https://mp.weixin.qq.com/s/RGTjSaY_knfXMAgecPV5Ag

原文:https://developer.okta.com/blog/2019/12/04/whats-new-nodejs-2020


分享到:


相關文章: