跳轉到內容

this.environment in Hooks

反饋

請在 Environment API 反饋討論區 提供反饋

在 Vite 6 之前,只有兩個可用環境:clientssr。外掛開發者可以透過 resolveIdloadtransform 鉤子中單個 options.ssr 引數,在外掛鉤子處理模組時區分這兩個環境。在 Vite 6 中,Vite 應用可以根據需要定義任意數量的命名環境。我們正在引入 this.environment 到外掛上下文中,以便在鉤子中與當前模組的環境進行互動。

影響範圍:Vite 外掛開發者

未來棄用計劃

this.environmentv6.0 中引入。options.ssr 的棄用計劃在未來的大版本中進行。屆時我們將建議外掛作者遷移到使用新 API。若要識別當前的用法,可在 vite 配置中將 future.removePluginHookSsrArgument 設定為 "warn"

動機

this.environment 不僅允許外掛鉤子實現瞭解當前環境名稱,還可以訪問環境配置選項、模組圖資訊以及轉換流水線(environment.configenvironment.moduleGraphenvironment.transformRequest())。在上下文中提供環境例項,使得外掛開發者無需再依賴整個開發伺服器例項(通常在啟動時透過 configureServer 鉤子快取)。

遷移指南

對於現有外掛的快速遷移,請在 resolveIdloadtransform 鉤子中,將 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
      }
    },
  }
}

為了實現更穩健的長期維護,外掛鉤子應透過細粒度的環境選項來處理 多環境支援,而不是依賴環境名稱。