構建期間的共享外掛
反饋
請在 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)
}
}
}