ホームページ >ウェブフロントエンド >jsチュートリアル >Node.js 15 の正式バージョンがリリースされ、Node.js 14 が現在の安定版リリースとして置き換えられます。

Node.js 15 の正式バージョンがリリースされ、Node.js 14 が現在の安定版リリースとして置き換えられます。

青灯夜游
青灯夜游転載
2020-10-22 19:57:424360ブラウズ

Node.js 15 の正式バージョンがリリースされ、Node.js 14 が現在の安定版リリースとして置き換えられます。

2 日前、Node.js は Node.js 15 の正式バージョンを正式にリリースしました。Node.js 15 は、Node.js 14 を現在の安定版リリースとして置き換えます。今月後半に LTS (長期サポート) バージョンにアップグレードされる予定です。 Node.js 15 の最新機能を体験したい場合は、公式 Web サイトからダウンロードできます。

Node.js 15 の正式バージョンがリリースされ、Node.js 14 が現在の安定版リリースとして置き換えられます。

ビデオ チュートリアルの推奨事項: nodejs チュートリアル

それでは、Node.js 15 ではどのような新機能がもたらされるのでしょうか?主に次の側面に反映されます:

  • AbortController
  • N-API バージョン 7
  • npm 7
  • 未処理の拒否はデフォルトでスローされます
  • QUIC
  • V8 8.6

AbortController

AbortController インターフェイスはコントローラー オブジェクトを表し、開発者が必要に応じて 1 つ以上の Web リクエストを中止できるようにします。 .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() メソッドが呼び出されたときに中止イベントが発行され、AbortController は中止イベントを 1 回だけトリガーします。また、AbortSignal にアタッチされたイベント リスナーは、#{once: true} パラメータ オプション (または EventEmitterAPI の同等の Once()) を使用して、中止イベントが処理されるとイベント リスナーが削除されるようにする必要があります。

AbortController の Node.js API ドキュメントについては、「AbortController」を参照してください。

N-API 7

N-API は、基盤となる JavaScript ランタイム環境 (V8 など) から独立し、Node.js 自体の一部としてネイティブ プラグインを構築するための API です。この API は、Node.js のバージョン全体でコンパイルされたアプリケーション バイナリ インターフェイス (ABI) の安定バージョンとして機能します。これは、基盤となる JavaScript エンジンへの変更からアドオン プラグインを分離するように設計されており、あるバージョンでコンパイルされたモジュールを再コンパイルせずに、新しいバージョンの Node.js で実行できるようにします。

N-API は、Node.js バージョンとさまざまなコンパイラ レベルの間でアプリケーション プログラミング インターフェイス (ABI) の安定性を保証する C 言語 API です。 C API の方が使いやすいかもしれません。 C の使用をサポートするために、Node.js は、インライン可能な C API を提供する、node-addon-api と呼ばれる C ラッパー モジュールを使用します。 node-addon-api を使用して構築されたバイナリは、Node.js によってエクスポートされた C 関数シンボルに基づく N-API インターフェイスに依存します。node-addon-api は、N-API への呼び出しを記述するコードをより効率的に作成する方法です。

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 に関する関連コンテンツが提供されます。

npm 7

Node.js 15 には、npm の新しいメジャー バージョンである npm 7 が付属しています。 npm 7 には、npm ワークスペースや新しい package-lock.json 形式など、多くの新機能があります。 npm 7 には、yarn.lock ファイルのサポートも含まれています。 npm 7 の大きな変更点の 1 つは、ピア依存関係のデフォルトのインストールです。

未処理の拒否はデフォルトでスローされます

Node.js 15 以降、unhandledRejection のデフォルト モードは throw (以前は warn) に変更されました。 throw モードでは、unhandledRejection フックが設定されていない場合、unhandledRejection はキャッチされない例外として発生します。 unhandledRejection フックを使用しているユーザーには動作の変化は見られず、引き続き --unhandled-rejections=mode プロセス フラグを使用してモードを切り替えることができます。

Node.js の以前のバージョンの多くは、デフォルトで UnhandledPromiseRejectionWarning を発行していました。「Node.js User Insights: Unhandled Promise Rejections」調査の結果によれば、Node.js TSC はモードを投げる。

QUIC

QUIC は、Google が開発した UDP ベースの低遅延インターネット トランスポート層プロトコルで、HTTP/3 の基本トランスポート プロトコルです。さらに、2016 年 11 月には、国際インターネット技術特別委員会 (IETF) が第 1 回 QUIC ワーキング グループ会議を開催し、業界から幅広い注目を集め、QUIC が新世代のトランスポート層プロトコルになるための重要な一歩を踏み出し始めたことを意味します。一方、QUIC には、TLS 1.3 セキュリティ、フロー制御、エラー修正、接続移行、多重化が組み込まれています。

Node.js 15 には、QUIC の実験的サポートが付属しています。これは、 --experimental-quic 構成フラグを使用して Node.js をコンパイルすることで有効にできます。たとえば、コア ネット モジュールは、次のコードを使用して 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。