跳至內容

Hooks 中的 this.environment

意見回饋

請在環境 API 意見回饋討論提供您的意見

在 Vite 6 之前,只有兩種環境可用:clientssrresolveIdloadtransform 中的單一 options.ssr 插件 Hook 參數,允許插件作者在插件 Hook 中處理模組時區分這兩種環境。在 Vite 6 中,Vite 應用程式可以根據需要定義任意數量的命名環境。我們在插件上下文中引入 this.environment,以便在 Hook 中與目前模組的環境互動。

影響範圍:Vite 插件作者

未來棄用

this.environmentv6.0 中引入。計劃在 v7.0 中棄用 options.ssr。屆時,我們將開始建議您將插件遷移到新的 API。若要識別您的使用情況,請在您的 vite 配置中將 future.removePluginHookSsrArgument 設定為 "warn"

動機

this.environment 不僅允許插件 Hook 實作知道目前的環境名稱,還可以存取環境配置選項、模組圖表資訊和轉換管道 (environment.configenvironment.moduleGraphenvironment.transformRequest())。在上下文中提供環境實例,可讓插件作者避免對整個開發伺服器的依賴 (通常在啟動時透過 configureServer Hook 快取)。

遷移指南

對於現有的插件進行快速遷移,請在 resolveIdloadtransform Hook 中將 options.ssr 參數替換為 this.environment.name !== 'client'

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.name !== 'client'

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

為了更健全的長期實作,插件 Hook 應使用精細的環境選項處理多個環境,而不是依賴環境名稱。

依 MIT 授權發布。(ccee3d7c)