diff --git a/docs/reference/config.md b/docs/reference/config.md index f4942264..532525a4 100644 --- a/docs/reference/config.md +++ b/docs/reference/config.md @@ -302,6 +302,20 @@ export default defineConfig({ }) ``` +## `viteIgnorePlugins` + +`string[]` + +List of Vite plugin names to exclude for Histoire. + +```ts +export default defineConfig({ + viteIgnorePlugins: [ + 'vite-plugin-svelte-kit', + ], +}) +``` + ## `viteNodeTransformMode` `{ web?, ssr? }` diff --git a/packages/histoire-shared/src/types/config.ts b/packages/histoire-shared/src/types/config.ts index bb759ab7..8cb5b944 100644 --- a/packages/histoire-shared/src/types/config.ts +++ b/packages/histoire-shared/src/types/config.ts @@ -154,6 +154,10 @@ export interface HistoireConfig { * Vite config override */ vite?: ViteConfig | ((config: ViteConfig, env: ViteConfigEnv) => void | ViteConfig | Promise) + /** + * Remove those plugins from the Vite configuration + */ + viteIgnorePlugins?: string[] /** * Transpile dependencies when collecting stories on Node.js */ diff --git a/packages/histoire/src/node/config.ts b/packages/histoire/src/node/config.ts index c61333d4..5af701b0 100644 --- a/packages/histoire/src/node/config.ts +++ b/packages/histoire/src/node/config.ts @@ -129,6 +129,7 @@ export function getDefaultConfig (): HistoireConfig { }, } }, + viteIgnorePlugins: [], } } diff --git a/packages/histoire/src/node/vite.ts b/packages/histoire/src/node/vite.ts index 8261b87d..dd35e05f 100644 --- a/packages/histoire/src/node/vite.ts +++ b/packages/histoire/src/node/vite.ts @@ -64,6 +64,25 @@ async function mergeHistoireViteConfig (viteConfig: InlineConfig, ctx: Context) viteConfig = mergeViteConfig(viteConfig, overrides) } } + + let flatPlugins = [] + if (viteConfig.plugins) { + for (const pluginOption of viteConfig.plugins) { + if (Array.isArray(pluginOption)) { + flatPlugins.push(...await Promise.all(pluginOption)) + } else { + flatPlugins.push(await pluginOption) + } + } + flatPlugins = flatPlugins.filter(Boolean) + } + + if (ctx.config.viteIgnorePlugins) { + flatPlugins = flatPlugins.filter(plugin => !ctx.config.viteIgnorePlugins.includes(plugin.name)) + } + + viteConfig.plugins = flatPlugins + return viteConfig }