Options#
pluginBarrel takes no arguments. You configure it through output.barrel, either on defineConfig to set the root barrel and the default every plugin inherits, or on a single plugin to override that plugin's barrel.
| Option | Type | Default | Description |
|---|---|---|---|
output.barrel | { type: 'all' | 'named' } | false | false | Re-export style for the barrel files |
type | 'all' | 'named' | Required | Named exports or a wildcard export |
nested | boolean | false | Write an index.ts in every subdirectory |
output.barrel#
The type field picks the export style. A plugin's output.barrel also accepts nested, so the plugin writes an index.ts in every subdirectory. The root output.barrel has no nested field and always stays flat.
Call a plugin with no output at all and it uses its own default, which already sets barrel: { type: 'named' }. The moment you pass an output object of your own, that default is replaced whole, so a plugin configured as pluginTs({ output: { path: 'types' } }) has no barrel of its own and falls back to config.output.barrel, which is false unless you set it.
Set barrel: { type: 'named' | 'all' } on defineConfig to enable barrels everywhere: a root barrel, and the default every plugin without its own output.barrel inherits. A plugin that sets its own output.barrel overrides that inherited value, including back to false, which also drops its files from the root barrel.
| Type: | { type: 'all' | 'named', nested?: boolean } | false |
| Default: | false |
type#
Export style for the barrel files. Required whenever output.barrel is set to an object.
'named're-exports each symbol by name from the file's named exports. Best for tree-shaking and explicit imports.'all'usesexport *, a smaller barrel that re-exports everything.
| Type: | 'all' | 'named' |
| Default: | Required, no default |
::: code-group
// src/gen/index.ts
export { getUser, User } from './api/user'
export { getPost, Post } from './api/post'
export { User } from './api/types/User'
// src/gen/index.ts
export * from './api/user'
export * from './api/post'
export * from './api/types/User'
:::
nested#
Changes what each barrel references. A barrel is written for every directory either way. With nested: false, the plugin's top barrel reaches through to the leaf files. With nested: true, each barrel re-exports only what sits directly inside its directory, including the subdirectory barrels below it, so callers can import from any depth. This field works on a plugin's output.barrel only.
| Type: | boolean |
| Default: | false |
::: code-group
// src/gen/api/index.ts
export * from './user'
export * from './post'
export * from './types/User'
// src/gen/api/types/index.ts
export * from './User'
// src/gen/api/index.ts re-exports its files and subdirectories
export * from './user'
export * from './post'
export * from './types'
// src/gen/api/types/index.ts re-exports its files
export * from './User'
:::