Node.js 在 2020 年有什麼新東西

2019 年,Node.js 已經10歲了,而 NPM 上可用的包數量也超過了 100 萬個。Node.js 本身的下載數也仍在上升,同比上年增長 40%。另一個重要的里程碑是 Node.js 最近加入了 OpenJS 基金會,該基金會承諾改善項目的健康度和可持續性,並加強與整個 JavaScript 社區的協作。


Node.js 在 2020 年有什麼新東西


如你所見,在短時間內發生了很多事情!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 fileasync function sendMessage { ... }export { sendMessage };// index fileimport { 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 做出貢獻的方法列表。

而這裡,可以滿足你對知識的渴望!無論你是應屆畢業生,還是未從事過IT行業的社會人員,亦或是IT從業者。只要你對目前的薪資不滿、對現狀不滿、對生活迷茫,不如來學習!

搜索愛創課堂,找源哥領取


分享到:


相關文章: