タイトルがNode18の新機能の解釈に変更されました

DachangTechnologyAdvancedフロントエンドノードAdvanced

トッププログラマーの成長ガイドをクリックし、公開番号に注意してください

返信1、高度なノード交換グループに参加する

著者:天竺   

住所:https://www.zhihu.com/people/liuyong25/posts

概要

Node.jsはバージョン18.0.0fetchnode:testのような標準モジュールが組み込まれています。

「一文コメント:std libが標準化され、userlibが改良されています。」

早く体験する方法

fnm、nvs、nvmなどのNode.jsバージョンマネージャーをお勧めします。

$ fnm install 18
Installing Node v18.0.0 (arm64)

$ fnm use 18
Using Node v18.0.0

$ node -v
v18.0.0

このバージョンはLTSバージョンではないことに注意してください。実稼働環境では使用しないでください。LTSバージョンになるには2022-10-25まで待つ必要があります。

8c141097cf0d1855814732dc906ee85a.pnghttps://github.com/nodejs/release

未来を見据えて

プロジェクトはまた、「次の10」の取り組みを続けています。この取り組みの目標は、Node.jsの最初の10年間で成功につながった理由を振り返り、次の10年間で成功するための方向性を設定することです。

Node.jsは、次の10の作業を正式に開始し、将来的にいくつかの重要なことについて話し合いました。

  • 最新のHTTP

  • フレンドリータイプのサポート

  • 初心者向けのプログレッシブドキュメント

  • ECMAScript仕様のサポートとタイムリーなフォローアップ

  • ロギング/メトリクス/トレース、APMなどを含む可観測性。

  • より優れたマルチスレッドサポート

  • 単一のファイルとしてパッケージ化された配布方法をサポートします

たとえば、上記のFetchは、ModernHTTP会議の議論に関連しています。

ESMと可観測性の進捗状況は、6月に開催されるOpenJS World会議で共有され、関連する進展を追跡できます。

フェッチAPI

フロントエンドの学生は、fetch()このあります。このAPIは、従来のXMLHttpRequestに代わる標準のネットワークリクエスト機能を提供します。

一方、Node.js側では、公式のhttp.request()は低レベルで基本的すぎて、多くの場合、多くのカプセル化が必要になります。たとえば、302後の自動ジャンプ、ファイルのアップロード、応答結果の解析などです。したがって、Node.jsコミュニティには多くの上位レベルのリクエストライブラリのカプセル化があります。

  • かつてコミュニティで人気だったリクエストライブラリが昨年メンテナンスの停止を発表した後、コミュニティにも多くの混乱を引き起こしました。

  • 私たちのEggにはurllibが組み込まれているため、Aliが長年にわたってネットワーク要求を踏んできた落とし穴が生じています。十分に安定していますが、コードは少し古いものです。

  • 詳細については、代替ライブラリを参照してください。天竺:さようならを言う必要がある古いnpm家宝ライブラリ。

「昨年、Node.jsは、優れたパフォーマンス、優れたスケーラビリティ、組み込みのモックおよびその他の機能を備えた非常に最新のライブラリである「 undici 」を正式にリリースしました。

undiciの命名も興味深いです:HTTP / 1.1クライアント→11→11→Undici、これはイタリア語で11です。

そのため、「Node.jsには、「フェッチ仕様」に準拠した新しいリクエストライブラリが最終的に組み込まれ、最下層はundiciに基づいて実装されます。」

// ConardLi
const res = await fetch('https://nodejs.org/api/documentation.json');
if (res.ok) {
  const data = await res.json();
  console.log(data);
}

それはそれと同じくらい単純で、http.request()のコールバックスタイルのコードよりもはるかに単純です。通常、スクリプトなどを作成するときに追加のクラスライブラリを導入する必要はありません。

グローバルに追加されたフェッチ、FormData、ヘッダー、リクエスト、レスポンスAPI、およびWebStreamsAPI。

デフォルトで有効になっているのはまだ実験的な機能段階です。ドキュメントはグローバルの章にあります。

おそらく仕様に従うために、モック、プロキシ、プールなどのundiciの多くの機能は提供されていません。


テストランナー

単体テストは非常に重要です。多くの新しいプログラミング言語には対応する機能が組み込まれていますが、フロントエンドは常にコミュニティによって実装されています。フロントエンドの学生に馴染みのあるテストランナーには、MochaやJestが含まれます。

// mocha showcase - code秘密花园
import assert from 'assert/strict';

describe('test/index.test.js', () => {
  it('test1', async () => {
    const res = await fetch('https://nodejs.org/api/documentation.json');
    assert(res.ok);
  });

  it.skip('skip some test', () => {});
});

最後に、Node.jsは18.xのテスト機能を公式にサポートしています。

import test from 'node:test';
import assert from 'assert/strict';

// 等价于 describe() - code秘密花园
test('asynchronous passing test', async () => {
  const res = await fetch('https://nodejs.org/api/documentation.json');
  assert(res.ok);
});

test('multi level test', async (t) => {
  // 等价于 it()  - code秘密花园
  await t.test('subtest 1', (t) => {
    assert.strictEqual(1, 1);
  });

  await t.test('subtest 2', (t) => {
    assert.strictEqual(2, 2);
  });
});

// 等价于 describe.skip() / it.skip()
test('skip option', { skip: true }, () => {});

// 等价于 describe.only() / it.only()
test('only option', { only: true }, () => {});

見られます:

  • 実際、構文は似ており、もう少し簡潔になりtest()ます。スキップするだけでなく、オプションは同時実行の同時実行もサポートします。

  • ランチャーは必要ありません。各ファイルはスタンドアロンの実行可能なNode.jsコードです。

  • before/after/beforeEach/afterEachこの機能はまだサポートされていません。フォローアップサポートについては、問題の説明を参照してください。

  • Reporterはまだサポートされていませんが、ログ出力は標準のTAP形式であるため、既存のコミュニティエコロジーを簡単に再利用できるはずです。

カバレッジの進化プロセスと同様に、以前はnycを使用してコード変換を積み上げていましたが、現在はNode.jsの組み込みカバレッジ出力になり、nycはc8などのカバレッジレポート生成ツールに簡略化されています。

その後のMochaなどは、同様の上位レベルのカプセル化になり、バッチ実行やReporterなどの機能を提供することが期待されています。


ビルド時のユーザーランドスナップショット

簡単に言うと、jsをv8スナップショットに直接コンパイルできるため、起動時間を大幅に短縮できます。

現在、このバージョンはNode.jsソースコードを介してのみコンパイルでき、Node.jsランタイム、つまりビルド時にのみコンパイルできます。

# 把一段 markdown 渲染的逻辑,直接打包到 Node Runtime
$ cd /path/to/node/source
$ ./configure --node-snapshot-main=marked.js
$ make node

# 执行编译好的 Node Runtime
$ out/Release/node
> const html = globalThis.marked('# this is title');

Qiu Yiはこの機能を引き続き推進しており、将来的にはNode.jsソースコードをコンパイルする必要はありません。

$ node --build-snapshot --snapshot-blob marked.blob marked.js 
$ node --snapshot-blob marked.blob

PS:この機能は、コマンドラインCLIの独立したパッケージ化に適しているようです。https://github.com/nodejs/node/issues/42566


V8エンジンのアップグレード

内蔵のV8エンジンがバージョン10.1にアップグレードされました。注目すべき機能:

  • 「クラスフィールドとプライベートクラスメソッドのパフォーマンスの最適化。」

  • Intl仕様のサポートは、日付のローカリゼーションと文字列処理を行うときに非常に役立ちます。

  • 配列はfindLast()やfindLastIndex()などをサポートします。

Qiu Yiは、その背後にある実装を共有するための新しいクラス機能を備えたインスタンスのより高速な初期化に関する記事も書いています。

PS:ECMAScript隔月レポート:デコレータの提案はステージ3に入りました。AlibabaのNodeアーキテクチャチームは今年V8でのデコレータソリューションの実装を推進しますが、確実に追いつくことはなく、Node.js20.xのみが追いつくでしょう。見られる。


ESMサポート

18.xで新しいことは何もありませんが、過去数か月にわたってECMAScriptモジュールを実装するための継続的な推進がありました。

  • JSONインポートアサーションのサポート。

  • JSONモジュールの公式サポート。

  • HTTPSおよびHTTPインポートの実験的サポート。

  • Node.jsローダーチームは、ECMAScriptモジュールローダーの実装の開発も続けています。


ツールチェーンとコンパイラのアップグレード

  • LinuxバージョンはRHEL8上に構築されており、glibc2.28以降が必要です。

  • macOSにはバージョン10.15以降が必要です。

  • 古いバージョンのWindowsの多くはサポートされなくなりました。

PS:CentOS 7は正式にメンテナンスされなくなり、対応するglibcのバージョンが低すぎるため、アップグレードできません。

関連情報

著者:天竺https://www.zhihu.com/people/liuyong25/posts

  • http://nodejs.org/en/blog/announcements/v18-release-announce

  • https://nodejs.org/en/blog/release/v18.0.0/

Node 社群


我组建了一个氛围特别好的 Node.js 社群,里面有很多 Node.js小伙伴,如果你对Node.js学习感兴趣的话(后续有计划也可以),我们可以一起进行Node.js相关的交流、学习、共建。下方加 考拉 好友回复「Node」即可。

如果你觉得这篇内容对你有帮助,我想请你帮我2个小忙:

1. 点个「在看」,让更多人也能看到这篇文章2. 订阅官方博客 www.inode.club 让我们一起成长

点赞和在看就是最大的支持❤️

おすすめ

転載: blog.csdn.net/xgangzai/article/details/124395321