目錄
AbortController
N-API 7
npm 7
unhandled rejections 預設拋出
QUIC
V8 8.6
Promise.any()——MDN
AggregateError——MDN
String.prototype.replaceAll()——MDN
安利升级
首頁 web前端 js教程 Node.js 15正式版發布,將替代Node.js 14成為目前的穩定發行版

Node.js 15正式版發布,將替代Node.js 14成為目前的穩定發行版

Oct 22, 2020 pm 07:57 PM
javascript node.js 前端

Node.js 15正式版發布,將替代Node.js 14成為目前的穩定發行版

前兩天,Node.js官方發布了Node.js 15的正式版本,Node.js 15 將替代Node.js 14 成為當前的穩定發行版,後者將在本月稍後升級為LTS(長期支援)版本。如果大家想體驗Node.js 15 的最新功能,可以從官方進行下載。

Node.js 15正式版發布,將替代Node.js 14成為目前的穩定發行版

影片教學推薦:nodejs 教學

那Node.js 15帶來了哪些新的功能和特性呢?主要體現在以下幾個方面:

  • AbortController
  • N-API 版本7
  • npm 7
  • unhandled rejections 預設拋出
  • QUIC
  • V8 8.6

AbortController

AbortController介面表示一個控制器對象,允許開發者根據需要中止一個或多個Web要求, Node.js 15 加入了AbortController 的一個實驗性實作。 AbortController 是一個全域實用工具類,可根據 AbortController Web API在選定的基於 Promise 的 API 中取消發出的請求訊號,如下所示。

const ac = new AbortController();
ac.signal.addEventListener('abort', () => console.log('Aborted!'),
{ once: true });
ac.abort();
console.log(ac.signal.aborted);    //Prints True
登入後複製

在上面的範例中,當呼叫 abortController.abort()方法時就會發出 abort 事件,AbortController 將只觸發一次 abort 事件。同時,附加到AbortSignal 上的事件偵聽器應使用{ once: true}參數選項(或等效於EventEmitterAPI 的once()),以確保一旦abort 事件處理,然後再將事件偵聽器刪除。

關於AbortController的 Node.js API 文檔,可以參考:AbortController。

N-API 7

N-API是一個用於建立本機外掛程式的API,它獨立於底層JavaScript執行環境(如V8),並作為Node.js本身的一部分。此API將作為跨Node.js版本已編譯的應用程式介面(Application Binary Interface)的穩定版,簡稱(ABI)。它是為了將Addons插件和底層JavaScript引擎的變更隔離開來,並且允許在一個版本編譯的模組不需要重新編譯就可以在更高版本的Node.js上運行。

N-API是一個C語言的API,它確保了Node.js版本和不同編譯器層級之間應用程式介面(ABI)的穩定性。 C API可以更容易使用。為了支援使用C ,Node.js使用了一個C 包裝器模組叫做node-addon-api,此包裝器提供了一個可內聯的C API。使用node-addon-api建構的二進位檔案將依賴Node.js導出的基於C函數符號的N-API接口,node-addon-api是一種更有效寫程式碼的方法,用來編寫呼叫N-API 。

關於 Node.js 的N-API,可以參考:C/C addons with N-API

下面是node-addon-api的使用範例。

Object obj = Object::New(env);
obj["foo"] = String::New(env, "bar");
登入後複製
napi_status status;
napi_value object, string;
status = napi_create_object(env, &object);
if (status != napi_ok) {
  napi_throw_error(env, ...);
  return;
}

status = napi_create_string_utf8(env, "bar", NAPI_AUTO_LENGTH, &string);
if (status != napi_ok) {
  napi_throw_error(env, ...);
  return;
}

status = napi_set_named_property(env, object, "foo", string);
if (status != napi_ok) {
  napi_throw_error(env, ...);
  return;
}
登入後複製

這次更新的N-API 7 是上一個大版本以來的第一個新版本,帶來了ArrayBuffers的相關內容。

npm 7

Node.js 15 附帶了 npm 的新大版本 npm 7。 npm 7 有許多新功能,包括 npm 工作區和新的 package-lock.json 格式。 npm 7 也包括 yarn.lock 檔案支援。 npm 7 的一大變更是預設安裝對等依賴項。

unhandled rejections 預設拋出

從 Node.js 15 開始,unhandledRejection 的預設模式已變更為 throw(以前是 warn)。在 throw 模式下,如果未設定 unhandledRejection hook,則會將 unhandledRejection 提升為未捕獲的例外。擁有 unhandledRejection hook 的使用者應該不會看到任何行為變化,並且仍然可以使用 --unhandled-rejections=mode 進程標誌來切換模式。

Node.js 之前的多個版本都會預設發出 UnhandledPromiseRejectionWarning,而根據《Node.js 使用者見解:Unhandled Promise Rejections》調查的結果,Node.js TSC 同意將模式切換為 throw。

QUIC

QUIC 是Google制定的一種基於UDP的低時延的互聯網傳輸層協議,它是 HTTP/3 的基礎傳輸協議。並且,在2016年11月國際互聯網工程任務組(IETF)召開了第一次QUIC工作組會議,受到了業界的廣泛關注,意味著QUIC開始在成為新一代傳輸層協議上邁出了關鍵的一步。同時,QUIC 具有內建的 TLS 1.3 安全性、流控制、錯誤修正、連線遷移和多路復用。

Node.js 15 附帶 QUIC 的實驗性支持,可透過 --experimental-quic 配置標誌編譯 Node.js 來啟用。例如,核心 net 模組公開了 Node.js QUIC 實現,程式碼如下。

const { createQuicSocket } = require('net');
登入後複製
'use strict';

const key = getTLSKeySomehow();
const cert = getTLSCertSomehow();

const { createQuicSocket } = require('net');

// Create the QUIC UDP IPv4 socket bound to local IP port 1234
const socket = createQuicSocket({ endpoint: { port: 1234 } });

socket.on('session', async (session) => {
  // A new server side session has been created!

  // The peer opened a new stream!
  session.on('stream', (stream) => {
    // Let's say hello
    stream.end('Hello World');

    // Let's see what the peer has to say...
    stream.setEncoding('utf8');
    stream.on('data', console.log);
    stream.on('end', () => console.log('stream ended'));
  });

  const uni = await session.openStream({ halfOpen: true });
  uni.write('hi ');
  uni.end('from the server!');
});

// Tell the socket to operate as a server using the given
// key and certificate to secure new connections, using
// the fictional 'hello' application protocol.
(async function() {
  await socket.listen({ key, cert, alpn: 'hello' });
  console.log('The socket is listening for sessions!');
})();
登入後複製

關於QUIC的更多信息,可以參考下面的文檔:QUIC 。

V8 8.6

V8 JavaScript 引擎已更新為 V8 8.6(V8 8.4 是 Node.js 14 中的最新版本)。除了效能調整和改進之外,V8 更新還帶來了以下語言特性:

Promise.any()——MDN

Promise.any() 接收一个Promise可迭代对象,只要其中的一个 promise 成功,就返回那个已经成功的 promise 。如果可迭代对象中没有一个 promise 成功(即所有的 promises 都失败/拒绝),就返回一个失败的 promise 和AggregateError类型的实例,它是 Error 的一个子类,用于把单一的错误集合在一起。

Promise.any()的参考文档如下所示:Promise.any()

AggregateError——MDN

AggregateError主要用于操作报告多个错误被抛出的场景,语法格式如下:

new AggregateError(errors[, message])
登入後複製

捕获一个AggregateError的示例代码如下:

Promise.any([
  Promise.reject(new Error("some error")),
]).catch(e => {
  console.log(e instanceof AggregateError); // true
  console.log(e.message);                   // "All Promises rejected"
  console.log(e.name);                      // "AggregateError"
  console.log(e.errors);                    // [ Error: "some error" ]
});
登入後複製

创建一个AggregateError的示例代码如下:

try {
  throw new AggregateError([
    new Error("some error"),
  ], 'Hello');
} catch (e) {
  console.log(e instanceof AggregateError); // true
  console.log(e.message);                   // "Hello"
  console.log(e.name);                      // "AggregateError"
  console.log(e.errors);                    // [ Error: "some error" ]
}
登入後複製

详细参考文档:AggregateError

String.prototype.replaceAll()——MDN

replaceAll() 方法是返回一个新字符串,新字符串所有满足 pattern 的部分都已被replacement 替换。pattern可以是一个字符串或一个 RegExp, replacement可以是一个字符串或一个在每次匹配被调用的函数。

const p = 'The quick brown fox jumps over the lazy dog. If the dog reacted, was it really lazy?';

const regex = /dog/gi;

console.log(p.replaceAll(regex, 'ferret'));
// expected output: "The quick brown fox jumps over the lazy ferret. If the ferret reacted, was it really lazy?"

console.log(p.replaceAll('dog', 'monkey'));
// expected output: "The quick brown fox jumps over the lazy monkey. If the monkey reacted, was it really lazy?"
登入後複製

详细内容参考:String.prototype.replaceAll()

安利升级

另外,随着 Node.js 15 新版本的发布!官方希望开发者尽快的进行升级,并将遇到的问题反馈就给官方,。当然,开发者还可以使用 Node.js 15 测试你的应用程序和模块,以确保你的项目与最新的 Node.js 特性和更改兼容。

并且,Node.js官方也开始计划升级到 Node.js 14 ,它将在下周升级到 LTS,支持会持续到直到 2023 年 4 月。还要注意的是,Node.js 10 将于 2021 年 4 月结束生命周期。因此,如果你仍在使用 Node.js 10,我们建议你开始计划升级。

原文链接:https://medium.com/@nodejs/node-js-v15-0-0-is-here-deb00750f278

更多编程相关知识,请访问:编程入门!!

以上是Node.js 15正式版發布,將替代Node.js 14成為目前的穩定發行版的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP與Vue:完美搭檔的前端開發利器 PHP與Vue:完美搭檔的前端開發利器 Mar 16, 2024 pm 12:09 PM

PHP與Vue:完美搭檔的前端開發利器在當今網路快速發展的時代,前端開發變得愈發重要。隨著使用者對網站和應用的體驗要求越來越高,前端開發人員需要使用更有效率和靈活的工具來創建響應式和互動式的介面。 PHP和Vue.js作為前端開發領域的兩個重要技術,搭配起來可以稱得上是完美的利器。本文將探討PHP和Vue的結合,以及詳細的程式碼範例,幫助讀者更好地理解和應用這兩

前端面試官常問的問題 前端面試官常問的問題 Mar 19, 2024 pm 02:24 PM

在前端開發面試中,常見問題涵蓋廣泛,包括HTML/CSS基礎、JavaScript基礎、框架和函式庫、專案經驗、演算法和資料結構、效能最佳化、跨域請求、前端工程化、設計模式以及新技術和趨勢。面試官的問題旨在評估候選人的技術技能、專案經驗以及對行業趨勢的理解。因此,應試者應充分準備這些方面,以展現自己的能力和專業知識。

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

Django是前端還是後端?一探究竟! Django是前端還是後端?一探究竟! Jan 19, 2024 am 08:37 AM

Django是一個由Python編寫的web應用框架,它強調快速開發和乾淨方法。儘管Django是web框架,但要回答Django是前端還是後端這個問題,需要深入理解前後端的概念。前端是指使用者直接和互動的介面,後端是指伺服器端的程序,他們透過HTTP協定進行資料的互動。在前端和後端分離的情況下,前後端程式可以獨立開發,分別實現業務邏輯和互動效果,資料的交

Go語言前端技術探秘:前端開發新視野 Go語言前端技術探秘:前端開發新視野 Mar 28, 2024 pm 01:06 PM

Go語言作為一種快速、高效的程式語言,在後端開發領域廣受歡迎。然而,很少有人將Go語言與前端開發聯繫起來。事實上,使用Go語言進行前端開發不僅可以提高效率,還能為開發者帶來全新的視野。本文將探討使用Go語言進行前端開發的可能性,並提供具體的程式碼範例,幫助讀者更了解這一領域。在傳統的前端開發中,通常會使用JavaScript、HTML和CSS來建立使用者介面

Golang與前端技術結合:探討Golang如何在前端領域發揮作用 Golang與前端技術結合:探討Golang如何在前端領域發揮作用 Mar 19, 2024 pm 06:15 PM

Golang與前端技術結合:探討Golang如何在前端領域發揮作用,需要具體程式碼範例隨著互聯網和行動應用的快速發展,前端技術也愈發重要。而在這個領域中,Golang作為一門強大的後端程式語言,也可以發揮重要作用。本文將探討Golang如何與前端技術結合,以及透過具體的程式碼範例來展示其在前端領域的潛力。 Golang在前端領域的角色作為一門高效、簡潔且易於學習的

如何在JavaScript中取得HTTP狀態碼的簡單方法 如何在JavaScript中取得HTTP狀態碼的簡單方法 Jan 05, 2024 pm 01:37 PM

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務

Django:前端和後端開發都能搞定的神奇框架! Django:前端和後端開發都能搞定的神奇框架! Jan 19, 2024 am 08:52 AM

Django:前端和後端開發都能搞定的神奇框架! Django是一個高效、可擴展的網路應用程式框架。它能夠支援多種Web開發模式,包括MVC和MTV,可以輕鬆地開發出高品質的Web應用程式。 Django不僅支援後端開發,還能夠快速建構出前端的介面,透過模板語言,實現靈活的視圖展示。 Django把前端開發和後端開發融合成了一種無縫的整合,讓開發人員不必專門學習

See all articles