From 53168fb592bf961db72fa60323af7ab149b47d02 Mon Sep 17 00:00:00 2001 From: Jun Shindo <46585162+jay-es@users.noreply.github.com> Date: Fri, 1 Nov 2024 20:43:01 +0900 Subject: [PATCH] docs: missing changes guides --- changes/per-environment-apis.md | 16 +++---- changes/shared-plugins-during-build.md | 65 ++++++++++++++++++++++++-- 2 files changed, 70 insertions(+), 11 deletions(-) diff --git a/changes/per-environment-apis.md b/changes/per-environment-apis.md index 0ba6ec19..acefb821 100644 --- a/changes/per-environment-apis.md +++ b/changes/per-environment-apis.md @@ -4,16 +4,12 @@ [Environment API feedback discussion](https://github.com/vitejs/vite/discussions/16358)でフィードバックをお寄せください。 ::: -ViteDevServer のモジュールグラフに関連する複数の API は、より独立した環境 API に置き換えられました。 - -- `server.moduleGraph` -> [`environment.moduleGraph`](/guide/api-environment#separate-module-graphs) -- `server.transformRequest` -> `environment.transformRequest` -- `server.warmupRequest` -> `environment.warmupRequest` +モジュールグラフとモジュール変換に関連する `ViteDevServer` の複数の API が `DevEnvironment` インスタンスに移動されました。 影響範囲: `Vite プラグイン作成者` ::: warning 将来の廃止予定 -Environment インスタンスは `v6.0` で初めて導入されました。`v7.0` では現在環境にある `server.moduleGraph` やその他のメソッドが廃止される予定です。まだサーバーのメソッドから移行することはお勧めしません。使用状況を明確にするために、vite の設定でこれらを設定してください。 +`Environment` インスタンスは `v6.0` で初めて導入されました。`v7.0` では現在環境にある `server.moduleGraph` やその他のメソッドが廃止される予定です。まだサーバーのメソッドから移行することはお勧めしません。使用状況を明確にするために、vite の設定でこれらを設定してください。 ```ts future: { @@ -26,8 +22,12 @@ future: { ## 動機 -// TODO: (訳注: 原文ママ) +Vite v5 以前では、単一の Vite 開発サーバーには常に 2 つの環境(`client` と `ssr`)がありました。 `server.moduleGraph` には、これらの両方の環境からの混合モジュールが含まれていました。ノードは `clientImportedModules` と `ssrImportedModules` のリストで接続されていました(ただし、それぞれに対して単一の `importers` リストが維持されていました)。変換されたモジュールは `id` と `ssr` ブーリアンで表されていました。このブール値は、`server.moduleGraph.getModuleByUrl(url, ssr)` や `server.transformRequest(url, { ssr })` などの API に渡す必要がありました。 + +Vite v6 では、任意の数のカスタム環境(`client`、`ssr`、`edge` など)を作成できるようになりました。単一の `ssr` ブール値では不十分になりました。API を `server.transformRequest(url, { environment })` という形式に変更する代わりに、これらのメソッドを環境インスタンスに移動し、Vite 開発サーバーなしで呼び出せるようにしました。 ## 移行ガイド -// TODO: (訳注: 原文ママ) +- `server.moduleGraph` -> [`environment.moduleGraph`](/guide/api-environment#separate-module-graphs) +- `server.transformRequest(url, ssr)` -> `environment.transformRequest(url)` +- `server.warmupRequest(url, ssr)` -> `environment.warmupRequest(url)` diff --git a/changes/shared-plugins-during-build.md b/changes/shared-plugins-during-build.md index e64cbeb4..d9fc91ac 100644 --- a/changes/shared-plugins-during-build.md +++ b/changes/shared-plugins-during-build.md @@ -4,7 +4,6 @@ [Environment API feedback discussion](https://github.com/vitejs/vite/discussions/16358)でフィードバックをお寄せください。 ::: -// TODO: (訳注: 原文ママ) [ビルド時の共有プラグイン](/guide/api-environment.md#shared-plugins-during-build)を参照してください。 影響範囲: `Vite プラグイン作成者` @@ -15,8 +14,68 @@ ## 動機 -// TODO: (訳注: 原文ママ) +開発とビルドのプラグインパイプラインを調整します。 ## 移行ガイド -// TODO: (訳注: 原文ママ) +環境をまたいでプラグインを共有できるようにするには、プラグインの状態を現在の環境でキー付けする必要があります。以下の形式のプラグインは、すべての環境における変換されたモジュールの数を数えます。 + +```js +function CountTransformedModulesPlugin() { + let transformedModules + return { + name: 'count-transformed-modules', + buildStart() { + transformedModules = 0 + }, + transform(id) { + transformedModules++ + }, + buildEnd() { + console.log(transformedModules) + }, + } +} +``` + +代わりに、各環境で変換されたモジュールの数を数えたい場合は、マップを保持する必要があります。 + +```js +function PerEnvironmentCountTransformedModulesPlugin() { + const state = new Map() + return { + name: 'count-transformed-modules', + perEnvironmentStartEndDuringDev: true, + buildStart() { + state.set(this.environment, { count: 0 }) + } + transform(id) { + state.get(this.environment).count++ + }, + buildEnd() { + console.log(this.environment.name, state.get(this.environment).count) + } + } +} +``` + +このパターンを簡素化するために、Vite の内部では、`usePerEnvironmentState` ヘルパーを使用しています: + +```js +function PerEnvironmentCountTransformedModulesPlugin() { + const state = usePerEnvironmentState<{ count: number }>(() => ({ count: 0 })) + return { + name: 'count-transformed-modules', + perEnvironmentStartEndDuringDev: true, + buildStart() { + state(this).count = 0 + } + transform(id) { + state(this).count++ + }, + buildEnd() { + console.log(this.environment.name, state(this).count) + } + } +} +```