コンテンツへスキップ

Hooksにおけるthis.environment

フィードバック

環境APIフィードバックディスカッションでフィードバックをお寄せください

Vite 6より前は、clientssrの2つの環境のみが利用可能でした。resolveIdloadtransformにおける単一のoptions.ssrプラグインフック引数により、プラグイン作者はプラグインフックでモジュールを処理する際にこれら2つの環境を区別することができました。Vite 6では、Viteアプリケーションは必要に応じて任意の数の名前付き環境を定義できます。フック内で現在のモジュールの環境と対話するために、プラグインコンテキストにthis.environmentを導入しています。

影響範囲: Vite プラグイン作者

将来的な非推奨化

this.environmentv6.0で導入されました。options.ssrの非推奨化は将来のメジャーリリースで計画されています。その時点で、新しいAPIを使用するようにプラグインの移行を推奨し始めます。使用状況を特定するには、vite設定でfuture.removePluginHookSsrArgument"warn"に設定してください。

動機

this.environmentは、プラグインフックの実装が現在の環境名を知ることを可能にするだけでなく、環境設定オプション、モジュールグラフ情報、変換パイプライン(environment.configenvironment.moduleGraphenvironment.transformRequest())にもアクセスできるようにします。コンテキストで環境インスタンスが利用可能になることで、プラグイン作者は開発サーバー全体への依存(通常はconfigureServerフックを通じて起動時にキャッシュされる)を回避できます。

移行ガイド

既存のプラグインが迅速に移行するには、resolveIdload、およびtransformフックでoptions.ssr引数をthis.environment.config.consumer === 'server'に置き換えてください。

ts
import { Plugin } from 'vite'

export function myPlugin(): Plugin {
  return {
    name: 'my-plugin',
    resolveId(id, importer, options) {
      const isSSR = options.ssr 
      const isSSR = this.environment.config.consumer === 'server'

      if (isSSR) {
        // SSR specific logic
      } else {
        // Client specific logic
      }
    },
  }
}

より堅牢な長期的な実装のためには、プラグインフックは環境名に依存するのではなく、きめ細かな環境オプションを使用して複数の環境に対応すべきです。

MIT ライセンスで公開。(083ff36d)