建構期間共享插件
意見回饋
請在環境 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)
}
}
}