Перейти к содержимому
GitHubXDiscord

triggery (плагин Vite)

Стабильный · с 0.1.0

Плагин 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[];
};
ПолеТипПо умолчаниюОписание
globstring | readonly string[]'src/**/*.trigger.{ts,tsx,js,jsx}'Паттерн(ы) для файлов триггеров. Разрешаются относительно корня проекта, который сообщает Vite.
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>,
);
import { defineConfig } from 'vite';
import triggery from '@triggery/vite';

export default defineConfig({
  plugins: [
    triggery({
      glob: 'src/features/**/*.trigger.ts',
    }),
  ],
});
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 {};
}