<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Node.js 15正式版發(fā)布

          共 5711字,需瀏覽 12分鐘

           ·

          2020-11-05 12:23

          英文 |?https?://medium.com/@nodejs/node-js-v15-0-0-is-here-deb00750f278
          前兩天,Node.js官方發(fā)布了Node.js 15的正式版本,Node.js 15將替代Node.js 14成為當(dāng)前的穩(wěn)定發(fā)行版,且將在本月晚些時候升級為LTS(長期支持)版本。如果大家想體驗下Node.js 15的最新功能,可以從官方進行下載。
          那節(jié)點。js 15帶來了一些新的功能和特性呢?主要體現(xiàn)在以下幾個方面:
          1. 中止控制器
          2. N-API版本7
          3. npm?7
          4. 未處理的拒絕默認值
          5. QUIC
          6. V8 8.6

          1、中止控制器

          AbortController接口表示一個控制器對象,允許開發(fā)者根據(jù)需要中止一個或多個Web請求,Node。
          js 15加入了AbortController的一個實驗性實現(xiàn)。
          AbortController是一個分布式實用工具類,可根據(jù)AbortController Web API在基于更改的Promise的API中取消發(fā)出的請求信號,如下所示。
          const ac = new AbortController();ac.signal.addEventListener('abort', () => console.log('Aborted!'),{ once: true });ac.abort();console.log(ac.signal.aborted); //Prints True
          在上面的示例中,當(dāng)調(diào)用abortController.abort()方法時就會發(fā)出中斷事件,同時,AbortController將僅觸發(fā)一次中斷事件。同時,附加到AbortSignal上的事件偵聽器應(yīng)使用{或等效于EventEmitterAPI的一次()),以確保重新終止事件得到處理,然后再將事件偵聽器刪除。
          關(guān)于AbortController的Node.js API文檔,可以參考:AbortController。

          2、N-API 7

          N-API是一個用于內(nèi)置本機插件的API,它獨立于且之上JavaScript運行時環(huán)境(如V8),并作為Node.js本身的一部分。
          此API將作為跨Node.js版本已編譯的應(yīng)用程序它是為了將插件和替換JavaScript引擎的插入隔離開來,并且允許在一個版本編譯的模塊中不需要重新編譯就可以在更高版本的Node.js上運行。
          N-API是一個C語言的API,它確保了Node.js版本和不同編譯器級別之間的應(yīng)用程序接口(ABI)的穩(wěn)定性。C++ API可以更容易使用。
          為了支持使用C ++,Node.js使用了一個C ++包裝器模塊稱為node-addon-api,此包裝器提供了一個可內(nèi)聯(lián)的C ++ API。
          使用node-addon-api生成的二進制文件將依賴于Node.js導(dǎo)出的基于C函數(shù)符號的N -API接口,node-addon-api是一種更有效的編寫代碼的方法,用來編寫調(diào)用N-API。
          關(guān)于Node.js的N-API,可以參考:帶有N-API的C / C ++插件
          下面是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的相關(guān)內(nèi)容。

          3、npm?7

          Node.js 15附帶了npm的新大版本npm7。npm7有很多新功能,包括npm工作區(qū)和新的package-lock.json格式。npm7還包括yarn.lock文件支持。npm7的一大堆變化是默認安裝對等依賴項。

          4、未處理的拒絕默認值

          從Node.js 15開始,unhandledRejection的默認狀態(tài)已更改為throw(以前是warn)。
          在throw模式下,如果未設(shè)置unhandledRejection hook,則將unhandledRejection升級為未捕獲的異常。
          會看到任何行為變化,并且仍然可以使用--unhandled-rejections = mode進度標(biāo)志來切換模式。
          Node.js之前的多個版本都會發(fā)出UnhandledPromiseRejectionWarning,而根據(jù)《 Node.js用戶見解:Unhandled Promise Rejections》調(diào)查的結(jié)果,Node.js TSC同意將模式切換為throw。

          5、QUIC

          QUIC是谷歌制定的一種基于UDP的低時延的互聯(lián)網(wǎng)傳輸層協(xié)議,它是HTTP / 3的基礎(chǔ)傳輸協(xié)議。
          并且,在2016年11月國際互聯(lián)網(wǎng)工程任務(wù)組(IETF)提出了第一次QUIC工作組會議,受到了業(yè)界的廣泛關(guān)注,意味著QUIC開始在成為新一代傳輸層協(xié)議上邁出了關(guān)鍵的一步。
          同時,QUIC具有內(nèi)置的TLS 1.3安全性,流控制,錯誤糾正,連接遷移和多路互補。
          Node.js 15附帶QUIC的實驗性支持,可通過--experimental-quic配置標(biāo)志編譯Node.js來啟用。例如,核心網(wǎng)模塊公開了Node.js QUIC實現(xiàn),代碼如下。
          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 1234const 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!');})();
          關(guān)于QUIC的更多信息,可以參考下面的文檔:QUIC。

          6、V8 8.6

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

          Promise.any()-MDN

          Promise.any()接收一個Promise可重復(fù)對象,只要其中的一個諾言成功,就返回那個已經(jīng)成功的諾言。如果可繼承對象中沒有一個諾言成功(即所有的諾言都失敗/拒絕),就返回一個失敗的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" ]});
          創(chuàng)建一個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的部分都已被替換。pattern可以是一個字符串或一個RegExp,replace可以是一個字符串或一個在每次匹配被調(diào)用的函數(shù)。
          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?"
          詳細內(nèi)容參考:String.prototype.replaceAll()

          升級

          另外,通過Node.js 15新版本的發(fā)布!官方希望開發(fā)者盡快進行進行升級,互換遇到的問題反饋就給官方,。當(dāng)然,開發(fā)者還可以使用Node.js 15測試你的應(yīng)用程序和模塊,以確保您的項目與最新的Node.js特性和更改兼容。
          并且,Node.js官方也開始計劃升級到Node.js 14,進入在下周升級到LTS,支持會持續(xù)到直到2023年4月。還要注意的是,Node.js 10到2021年4月結(jié)束生命周期。因此,如果你仍在使用Node.js 10,我們建議你開始計劃升級。

          瀏覽 49
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本爱爱一区二区视频 | 国产日韩又刺激又爽无码 | 国产ss视频在线观看 | AV高清无码在线 | 国产美女精品久久久 |