triggery (плагин Vite)
Плагин Vite, который на этапе сборки прогоняет glob по всем файлам *.trigger.{ts,tsx,js,jsx} в проекте и генерирует виртуальный модуль — virtual:triggery-registry — импортирующий их все. Импортни этот виртуальный модуль один раз в точке входа приложения, и каждый триггер сам зарегистрируется в рантайме; без ручной разводки, без построчных import './foo.trigger'.
HMR-осведомлён: правка существующего файла триггера переиспполняет его вызов createTrigger(...), а last-mount-wins в рантайме заменяет старую регистрацию. Добавление, удаление или переименование файла триггера инвалидирует виртуальный модуль, так что список импортов пересобирается при следующем запросе.
import triggery from '@triggery/vite';
// or
import { triggery } from '@triggery/vite';
Сигнатура
Заголовок раздела «Сигнатура»function triggery(options?: TriggeryViteOptions): Plugin;
type TriggeryViteOptions = {
readonly glob?: string | readonly string[];
};| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
glob | string | readonly string[] | 'src/**/*.trigger.{ts,tsx,js,jsx}' | Паттерн(ы) для файлов триггеров. Разрешаются относительно корня проекта, который сообщает Vite. |
Примеры
Заголовок раздела «Примеры»По умолчанию — добавить в vite.config
Заголовок раздела «По умолчанию — добавить в vite.config»import { defineConfig } from 'vite';
import triggery from '@triggery/vite';
export default defineConfig({
plugins: [triggery()],
});Затем в точке входа приложения:
// src/main.tsx
import 'virtual:triggery-registry';
import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import { App } from './App';
createRoot(document.getElementById('root')!).render(
<StrictMode>
<App />
</StrictMode>,
);Кастомный glob
Заголовок раздела «Кастомный glob»import { defineConfig } from 'vite';
import triggery from '@triggery/vite';
export default defineConfig({
plugins: [
triggery({
glob: 'src/features/**/*.trigger.ts',
}),
],
});Несколько globs
Заголовок раздела «Несколько globs»import { defineConfig } from 'vite';
import triggery from '@triggery/vite';
export default defineConfig({
plugins: [
triggery({
glob: ['src/**/*.trigger.ts', 'packages/*/src/**/*.trigger.ts'],
}),
],
});Типизация виртуального модуля
Заголовок раздела «Типизация виртуального модуля»Добавь в глобальный .d.ts, чтобы TypeScript перестал жаловаться на bare-string импорт:
declare module 'virtual:triggery-registry' {
export {};
}