跳至內容

建構期間共享插件

意見回饋

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

請參閱建構期間共享插件

影響範圍:Vite 插件作者

未來預設變更

builder.sharedConfigBuild 最初在 v6.0 中引入。您可以將其設定為 true 來檢查您的插件在共享配置下的運作方式。我們正在尋求有關在插件生態系統準備就緒後,在未來的主要版本中變更預設值的意見回饋。

動機

對齊開發和建構插件管道。

遷移指南

為了能夠在不同環境之間共享插件,插件狀態必須以目前的環境為鍵。以下形式的插件將會計算所有環境中轉換過的模組數量。

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<Environment, { count: number }>()
  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 導出一個 perEnvironmentState 輔助函式

js
function PerEnvironmentCountTransformedModulesPlugin() {
  const state = perEnvironmentState<{ 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)
    }
  }
}

根據 MIT 授權發布。(ccee3d7c)