Node.js 16 發(fā)布,V8 升級(jí)至 9.0!
我們很高興地宣布 Node.js 16 正式發(fā)布了!升級(jí)重點(diǎn)包括 V8 JS 引擎升級(jí)至 9.0,預(yù)構(gòu)建的 Apple Silicon 二進(jìn)制文件,還有一些額外的穩(wěn)定 API。
image.png
你可以在 這里[1] 下載最新版,或者使用 UNIX 上的 Node 版本管理器[2] 運(yùn)行 nvm install 16 命令進(jìn)行安裝。Node.js 博客中包含的變更日志可以在 這里[3] 找到。
最初,Node.js 16 將會(huì)替代 Node.js 15 成為我們的「當(dāng)前」發(fā)布版本。根據(jù) 發(fā)布時(shí)間表[4],Node.js 16 將是未來 6 個(gè)月的「當(dāng)前』版本,然后在 2021 年 10月 升級(jí)為長期支持(LTS)。一旦升級(jí)為長期支持,將以 “Gallium” 的代號(hào)發(fā)布。
提醒一下 —— Node.js 12 將保持長期支持直到2022年4月,Node.js 14 將保持長期支持直到 2023 年 4 月。Node.js 10 將在這個(gè)月底(2021 年 4 月)結(jié)束生命。可以在 Node.js 發(fā)布工作組倉庫[5]中找到關(guān)于我們的發(fā)布計(jì)劃或者時(shí)間表的更多細(xì)節(jié)。
V8 升級(jí)至 9.0
和往常一樣,V8 JavaScript 引擎的新版本帶來了性能調(diào)整和改進(jìn),并使 Node.js 保持最新的 JavaScript 語言特性。在 Node.js v16.0.0 中,V8 引擎從 Node.js 15 中的 8.6 升級(jí)到 9.0。
這個(gè)更新帶來了 ECMAScript RegExp 匹配索引,它提供了捕獲字符串的開始和結(jié)束索引。當(dāng)正則表達(dá)式具有 /d 標(biāo)志時(shí),索引數(shù)組可以通過匹配對(duì)象的 .indices 屬性獲得。
- > const matchObj = /(Java)(Script)/d.exec('JavaScript');
- undefined
- > matchObj.indices
- [ [ 0, 10 ], [ 0, 4 ], [ 4, 10 ], groups: undefined ]
- > matchObj.indices[0]; // Match
- [ 0, 10 ]
- > matchObj.indices[1]; // First capture group
- [ 0, 4 ]
- > matchObj.indices[2]; // Second capture group
- [ 4, 10 ]
- 復(fù)制代碼
V8 中的更多新特性以及更新內(nèi)容請(qǐng)查看 V8 博客:v8.dev/[6]。
穩(wěn)定的 Timers Promises API
Timers Promises API 提供了另一組返回 Promise 對(duì)象的定時(shí)器函數(shù),不再需要使用 util.promisify()。
- import { setTimeout } from 'timers/promises';
- async function run() {
- await setTimeout(5000);
- console.log('Hello, World!');
- }
- run();
- 復(fù)制代碼
James Snell 在 Node.js v15.0.0 中添加了該特性(github.com/nodejs/node…[7]
其他特性
我們發(fā)布進(jìn)度的本質(zhì)意味著新特性大約每?jī)芍茉凇府?dāng)前」發(fā)布版本線中發(fā)布一次。由于這個(gè)原因,最近的 Node.js 15 版本中已經(jīng)提供了許多新添加的內(nèi)容,但是對(duì)于運(yùn)行時(shí)來說仍然是相對(duì)較新的。
Node.js 15 最近發(fā)布的一些特性,也將在 Node.js 16 中可用,包括:
標(biāo)準(zhǔn) Web Crypto API[8] 的實(shí)驗(yàn)實(shí)現(xiàn)
npm 7(Node.js v16.0.0 中為 npm 7.10.0)
Node-API v8
穩(wěn)定的 Source Map v3
Web 平臺(tái) atob(buffer.atob(data))和btoa(buffer.btoa(data))實(shí)現(xiàn),以兼容遺留的 Web 平臺(tái) api
新的編譯器
Node.js 為幾種不同的平臺(tái)提供了預(yù)構(gòu)建的二進(jìn)制文件。對(duì)于每個(gè)主要版本,最小的工具鏈被評(píng)估并在適當(dāng)?shù)牡胤奖惶岢觥?/p>
Node.js v16.0.0 將會(huì)是第一個(gè)支持 Apple Silicon 的預(yù)構(gòu)建二進(jìn)制文件。雖然我們將為 Intel(darwin-x64)和 ARM (darwin-arm64)架構(gòu)提供單獨(dú)的 tarball,但 macOS 安裝程序(.pkg)將以 “fat”(多架構(gòu)) 二進(jìn)制文件的形式發(fā)布。
這些二進(jìn)制文件的生產(chǎn)版本得以實(shí)現(xiàn),要感謝 MacStadium 為該項(xiàng)目提供了必要的硬件。
在我們基于 linux 的平臺(tái)上,構(gòu)建 Node.js 16 的最低 GCC 版本將是 GCC 8.3。關(guān)于所支持的工具鏈和編譯器的詳細(xì)信息在Node.js BUILDING.md[9] 中有文檔說明。
描述
一個(gè)新的主要版本發(fā)布,這也是我們介紹新的運(yùn)行時(shí)廢棄的時(shí)候。Node.js 項(xiàng)目旨在將任何破壞性改變對(duì)生態(tài)系統(tǒng)的破壞最小化。該項(xiàng)目使用名為 CITGM[10](金礦中的金絲雀)的工具來測(cè)試任何破壞性更改(包括棄用)對(duì)大量流行的生態(tài)系統(tǒng)模塊的影響,以便在完成這些更改之前提供額外的見解。
Node.js 16 中值得注意的棄用包括運(yùn)行時(shí)棄用一些核心模塊的 process.binding() 訪問,比如 process.binding('http_parser')。