Skip to content

Общие плагины во время сборки ​

Обратная связь

Оставьте нам отзыв в обсуждении обратной связи по Environment 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)
    },
  }
}

Если мы вместо этого хотим подсчитать количество преобразованных модулей для каждого окружения, нам нужно сохранить карту:

ts
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:

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