跳轉到內容

構建期間的共享外掛

反饋

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

請參閱 構建期間的共享外掛

影響範圍:Vite 外掛開發者

未來的預設變更

builder.sharedConfigBuild 最早於 v6.0 引入。您可以將其設定為 true,以檢查您的外掛在共享配置下如何工作。我們正在尋求關於在外掛生態系統準備就緒後,在未來主要版本中更改此預設值的反饋。

動機

統一開發環境和構建環境的外掛流水線。

遷移指南

為了能夠在不同環境之間共享外掛,外掛狀態必須以當前環境為鍵(keyed)。以下形式的外掛將統計所有環境轉換模組的總數。

js
function CountTransformedModulesPlugin() {
  let transformedModules
  return {
    name: 'count-transformed-modules',
    buildStart() {
      transformedModules = 0
    },
    transform(id) {
      transformedModules++
    },
    buildEnd() {
      console.log(transformedModules)
    },
  }
}

如果我們想統計每個環境分別轉換了多少模組,則需要維護一個對映表(Map)。

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)
    }
  }
}