您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Node.js 15將替代Node.js 14成為當前的的穩定發行版的案例分析的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
前兩天,Node.js官方發布了Node.js 15的正式版本,Node.js 15 將替代 Node.js 14 成為當前的的穩定發行版,后者將在本月晚些時候升級為 LTS(長期支持)版本。如果大家想體驗下Node.js 15 的最新功能,可以從官方進行下載。
那Node.js 15帶來了哪些新的功能和特性呢?主要體現在以下幾個方面:
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是一個用于構建本機插件的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的相關內容。
Node.js 15 附帶了 npm 的新大版本 npm 7。npm 7 有許多新功能,包括 npm 工作區和新的 package-lock.json 格式。npm 7 還包括 yarn.lock 文件支持。npm 7 的一大變化是默認安裝對等依賴項。
從 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 是谷歌制定的一種基于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 JavaScript 引擎已更新為 V8 8.6(V8 8.4 是 Node.js 14 中的最新版本)。除了性能調整和改進之外,V8 更新還帶來了以下語言特性:
Promise.any() 接收一個Promise可迭代對象,只要其中的一個 promise 成功,就返回那個已經成功的 promise 。如果可迭代對象中沒有一個 promise 成功(即所有的 promises 都失敗/拒絕),就返回一個失敗的 promise 和AggregateError類型的實例,它是 Error 的一個子類,用于把單一的錯誤集合在一起。
Promise.any()的參考文檔如下所示:Promise.any()
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" ] }
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?"
另外,隨著 Node.js 15 新版本的發布!官方希望開發者盡快的進行升級,并將遇到的問題反饋就給官方,。當然,開發者還可以使用 Node.js 15 測試你的應用程序和模塊,以確保你的項目與最新的 Node.js 特性和更改兼容。
并且,Node.js官方也開始計劃升級到 Node.js 14 ,它將在下周升級到 LTS,支持會持續到直到 2023 年 4 月。還要注意的是,Node.js 10 將于 2021 年 4 月結束生命周期。
感謝各位的閱讀!關于Node.js 15將替代Node.js 14成為當前的的穩定發行版的案例分析就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。