You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/guide/api-environment-plugins.md
+38-1Lines changed: 38 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -146,7 +146,7 @@ interface HotUpdateOptions {
146
146
147
147
## Состояние плагинов для разных окружений {#per-environment-state-in-plugins}
148
148
149
-
Поскольку один и тот же экземпляр плагина используется для разных окружений, состояние плагина должно быть привязано к `this.environment`. Это соответствует подходу, уже используемому в экосистеме для хранения состояния модулей с использованием булева значения `ssr` в качестве ключа, чтобы избежать смешивания состояния клиентских и SSR-модулей. Для разделения состояния по окружениям можно использовать `Map<Environment, State>`. Обратите внимание, что для обратной совместимости хуки `buildStart` и `buildEnd` вызываются только для клиентского окружения, если не установлен флаг `perEnvironmentStartEndDuringDev: true`.
149
+
Поскольку один и тот же экземпляр плагина используется для разных окружений, состояние плагина должно быть привязано к `this.environment`. Это соответствует подходу, уже используемому в экосистеме для хранения состояния модулей с использованием булева значения `ssr` в качестве ключа, чтобы избежать смешивания состояния клиентских и SSR-модулей. Для разделения состояния по окружениям можно использовать `Map<Environment, State>`. Обратите внимание, что для обратной совместимости хуки `buildStart` и `buildEnd` вызываются только для клиентского окружения, если не установлен флаг `perEnvironmentStartEndDuringDev: true`. То же самое для `watchChange` и флага `perEnvironmentWatchChangeDuringDev: true`.
Хук `applyToEnvironment` вызывается во время конфигурации, в настоящее время после `configResolved`, поскольку проекты в экосистеме модифицируют плагины в нём. Разрешение плагинов окружения может быть перенесено на этап до `configResolved` в будущем.
229
229
230
+
## Связь между приложением и плагином {#application-plugin-communication}
231
+
232
+
`environment.hot` позволяет плагинам общаться с кодом на стороне приложения для данного окружения. Это эквивалент [связи «клиент-сервер»](/guide/api-plugin#client-server-communication), но поддерживает окружения, отличные от клиентского.
233
+
234
+
:::warning
235
+
236
+
Эта функция доступна только для окружений, поддерживающих HMR.
237
+
238
+
:::
239
+
240
+
### Управление экземплярами приложения {#managing-the-application-instances}
241
+
242
+
Имейте в виду, что в одном и том же окружении может работать несколько экземпляров приложения. Например, если у вас открыто несколько вкладок в браузере, каждая вкладка — это отдельный экземпляр приложения с отдельным соединением к серверу.
243
+
244
+
Когда устанавливается новое соединение, на экземпляре `hot` окружения эмитируется событие `vite:client:connect`. Когда соединение закрывается, эмитируется событие `vite:client:disconnect`.
245
+
246
+
Каждый обработчик события получает `NormalizedHotChannelClient` в качестве второго аргумента. Клиент — это объект с методом `send`, который можно использовать для отправки сообщений этому конкретному экземпляру приложения. Ссылка на клиент всегда одинакова для одного и того же соединения, поэтому вы можете сохранять её для отслеживания соединения.
// и, если нужно, отправляем ответ этому экземпляру приложения
257
+
client.send('my:foo:reply', `Привет от сервера! Вы сказали: ${data}`)
258
+
})
259
+
260
+
// рассылаем сообщение всем экземплярам приложения
261
+
server.environments.ssr.hot.send('my:foo', 'Привет от сервера!')
262
+
}
263
+
```
264
+
265
+
Сторона приложения аналогична связи «клиент-сервер». Вы можете использовать объект `import.meta.hot` для отправки сообщений плагину.
266
+
230
267
## Окружение в хуках сборки {#environment-in-build-hooks}
231
268
232
269
Так же, как и во время разработки, хуки плагинов также получают экземпляр окружения во время сборки, заменяя булевый параметр `ssr`. Это также работает для `renderChunk`, `generateBundle` и других хуков, которые используются только во время сборки.
Убедитесь, что вы реализуете события `vite:client:connect` / `vite:client:disconnect` в методах `on` / `off`, когда эти методы существуют. Событие `vite:client:connect` должно эмитироваться при установке соединения, а событие `vite:client:disconnect` — при закрытии соединения. Объект `HotChannelClient`, передаваемый обработчику события, должен иметь одну и ту же ссылку для одного и того же соединения.
385
+
366
386
Другой пример, использующий HTTP-запрос для взаимодействия между раннером и сервером:
0 commit comments