vitejs/vite · error · Error
Entries in "build.rolldownOptions.output" must specify "name
Error message
Entries in "build.rolldownOptions.output" must specify "name" when the format is "umd" or "iife".
What it means
In resolveBuildOutputs (build.ts:1085-1094), when build.rolldownOptions.output is an array, Vite iterates each output and requires that any entry whose format is 'umd' or 'iife' also specifies a name. Unlike the single-output path it cannot fall back to build.lib.name, so each array entry needs its own.
Source
Thrown at packages/vite/src/node/build.ts:1090
return libFormats.map((format) => ({ ...outputs, format }))
}
// By this point, we know "outputs" is an Array.
if (libOptions.formats) {
logger.warn(
colors.yellow(
'"build.lib.formats" will be ignored because "build.rolldownOptions.output" is already an array format.',
),
)
}
outputs.forEach((output) => {
if (
(output.format === 'umd' || output.format === 'iife') &&
!output.name
) {
throw new Error(
'Entries in "build.rolldownOptions.output" must specify "name" when the format is "umd" or "iife".',
)
}
})
}
return outputs
}
const warningIgnoreList = [`CIRCULAR_DEPENDENCY`, `THIS_IS_UNDEFINED`]
const dynamicImportWarningIgnoreList = [
`Unsupported expression`,
`statically analyzed`,
]
export function clearLine(): void {
const tty = process.stdout.isTTY && !process.env.CI
if (tty) {View on GitHub (pinned to 89620f09af)
Solutions
- Add a name property to every array element whose format is 'umd' or 'iife'.
- Alternatively avoid the array form and rely on build.lib.formats + build.lib.name for the single-output path.
- Double-check each output entry has format-appropriate required fields.
Example fix
// before
build: { lib: { entry: 'src/index.ts', name: 'MyLib' }, rolldownOptions: { output: [{ format: 'es' }, { format: 'umd' }] } }
// after
build: { lib: { entry: 'src/index.ts', name: 'MyLib' }, rolldownOptions: { output: [{ format: 'es' }, { format: 'umd', name: 'MyLib' }] } } Defensive patterns
Strategy: validation
Validate before calling
const outputs = config.build?.rolldownOptions?.output
if (Array.isArray(outputs)) {
outputs.forEach((o: any) => {
if ((o.format === 'umd' || o.format === 'iife') && !o.name) {
throw new Error(`Output with format ${o.format} needs a name`)
}
})
} Type guard
function outputsHaveNames(outputs: any[]): boolean {
return outputs.every((o) => (o.format !== 'umd' && o.format !== 'iife') || Boolean(o.name))
} Prevention
- When using an output array, set name on every umd/iife element.
- Prefer build.lib.formats + build.lib.name over the array form when possible.
- Add a config validator that scans output array entries.
When it happens
Trigger: Providing build.rolldownOptions.output as an array where one element has format: 'umd' or 'iife' but omits the name property.
Common situations: Generating multiple output bundles (e.g. es + umd) via an output array and forgetting name on the UMD element.
Related errors
- Multiple entry points are not supported when output formats
- Option "build.lib.name" is required when output formats incl
- Either "build.lib.entry" or the top-level "input" option is
- Vite does not support "rolldownOptions.output.file". Please
- Name in package.json is required if option "build.lib.fileNa
AI-assisted analysis of vitejs/vite@89620f09af (2026-08-03).
Data as JSON: /data/errors/46cb2d25a0309bb4.json.
Report an issue: GitHub.