output
Configuration options for the output bundle. These options control how Rolldown generates the final bundled files.
dir
- Type:
string - Optional: Yes ✅
- Path:
output.dir
The directory where output files will be written. Required when using multiple entry points.
Examples
export default {
input: {
main: 'src/index.js',
admin: 'src/admin.js',
},
output: {
dir: 'dist',
},
};file
- Type:
string - Optional: Yes ✅
- Path:
output.file
The file path for the output bundle. Used for single entry builds.
Examples
export default {
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
},
};In-depth
Use file for single-entry builds and dir for multi-entry builds.
exports
- Type:
'auto' | 'named' | 'default' | 'none' - Default:
'auto' - Path:
output.exports
Specifies what export mode to use for the bundle.
Examples
export default {
output: {
format: 'cjs',
exports: 'named',
},
};In-depth
The available modes:
'auto': Automatically determines the export mode based on the entry module's exports (recommended)'named': Exports are exposed as named exports'default': The entry module's default export is used as the main export'none': No exports (useful for side-effect-only bundles)
hashCharacters
- Type:
'base64' | 'base36' | 'hex' - Default:
'base64' - Path:
output.hashCharacters
The character set to use for content hashes in file names.
Examples
export default {
output: {
hashCharacters: 'hex',
entryFileNames: '[name]-[hash].js',
},
};In-depth
The available character sets:
'base64': Uses base64 characters (shortest hashes)'base36': Uses alphanumeric characters (0-9, a-z)'hex': Uses hexadecimal characters (0-9, a-f)
format
- Type:
'es' | 'cjs' | 'esm' | 'module' | 'commonjs' | 'iife' | 'umd' - Default:
'esm' - Path:
output.format
Expected format of generated code.
Examples
export default {
output: {
format: 'esm',
},
};In-depth
The available formats:
'es','esm','module': ES module format (usesimportandexport)'cjs','commonjs': CommonJS format (usesrequire()andmodule.exports)'iife': Immediately Invoked Function Expression (requiresnameoption)'umd': Universal Module Definition (requiresnameoption)
sourcemap
- Type:
boolean | 'inline' | 'hidden' - Default:
false - Path:
output.sourcemap
Controls source map generation and configuration. See output.sourcemap for detailed nested options.
Examples
export default {
output: {
sourcemap: true,
},
};banner
- Type:
string | ((chunk: RenderedChunk) => string | Promise<string>) - Optional: Yes ✅
- Path:
output.banner
Code to prepend to the beginning of each output chunk.
Examples
export default {
output: {
banner: '/* My Library v1.0.0 | MIT License */',
},
};WARNING
When using output.banner or output.footer with minification enabled, the banner or footer content may be stripped out unless it is formatted as a legal comment. To ensure your banner or footer persists through minification, use one of these comment formats:
- Comments starting with
/*!(e.g.,/*! My banner */) - Comments containing
@license(e.g.,/* @license My banner */) - Comments containing
@preserve(e.g.,/* @preserve My banner */) - Comments starting with
//!(for single-line comments)
This behavior is controlled by the output.legalComments option, which defaults to 'inline' and preserves these special comment formats.
footer
- Type:
string | ((chunk: RenderedChunk) => string | Promise<string>) - Optional: Yes ✅
- Path:
output.footer
Code to append to the end of each output chunk.
Examples
export default {
output: {
footer: '/* End of bundle */',
},
};WARNING
When using output.banner or output.footer with minification enabled, the footer content may be stripped out unless it is formatted as a legal comment. To ensure your footer persists through minification, use one of these comment formats:
- Comments starting with
/*!(e.g.,/*! My banner */) - Comments containing
@license(e.g.,/* @license My banner */) - Comments containing
@preserve(e.g.,/* @preserve My banner */) - Comments starting with
//!(for single-line comments)
This behavior is controlled by the output.legalComments option, which defaults to 'inline' and preserves these special comment formats.
intro
- Type:
string | ((chunk: RenderedChunk) => string | Promise<string>) - Optional: Yes ✅
- Path:
output.intro
Code to prepend inside the wrapper function (after banner, before actual code).
Examples
export default {
output: {
format: 'iife',
intro: 'const ENVIRONMENT = "production";',
},
};outro
- Type:
string | ((chunk: RenderedChunk) => string | Promise<string>) - Optional: Yes ✅
- Path:
output.outro
Code to append inside the wrapper function (after actual code, before footer).
Examples
export default {
output: {
format: 'iife',
outro: 'console.log("Bundle loaded");',
},
};extend
- Type:
boolean - Default:
false - Path:
output.extend
When true, extends the global variable defined by the name option rather than overwriting it. Only applies to iife and umd formats.
Examples
export default {
output: {
format: 'umd',
name: 'MyLib',
extend: true,
},
};esModule
- Type:
boolean | 'if-default-prop' - Default:
'if-default-prop' - Path:
output.esModule
Controls whether to add a __esModule: true property when generating CJS output.
Examples
export default {
output: {
format: 'cjs',
esModule: true,
},
};In-depth
The available options:
false: Never add__esModulepropertytrue: Always add__esModule: trueproperty'if-default-prop': Only add if there's a default export
assetFileNames
- Type:
string | ((chunkInfo: PreRenderedAsset) => string) - Default:
'assets/[name]-[hash][extname]' - Path:
output.assetFileNames
Pattern for naming asset files (non-JavaScript files).
Placeholders: [name], [hash], [extname]
Examples
export default {
output: {
assetFileNames: 'assets/[name].[hash][extname]',
},
};entryFileNames
- Type:
string | ((chunkInfo: PreRenderedChunk) => string) - Default:
'[name].js' - Path:
output.entryFileNames
Pattern for naming entry chunk files.
Placeholders: [name], [hash]
Examples
export default {
output: {
entryFileNames: '[name]-[hash].js',
},
};chunkFileNames
- Type:
string | ((chunkInfo: PreRenderedChunk) => string) - Default:
'[name]-[hash].js' - Path:
output.chunkFileNames
Pattern for naming non-entry chunk files (code-split chunks).
Placeholders: [name], [hash]
Examples
export default {
output: {
chunkFileNames: 'chunks/[name].[hash].js',
},
};cssEntryFileNames
- Type:
string | ((chunkInfo: PreRenderedChunk) => string) - Default:
'[name].css' - Path:
output.cssEntryFileNames
Pattern for naming CSS entry files.
Placeholders: [name], [hash]
Examples
export default {
output: {
cssEntryFileNames: 'styles/[name]-[hash].css',
},
};cssChunkFileNames
- Type:
string | ((chunkInfo: PreRenderedChunk) => string) - Default:
'[name]-[hash].css' - Path:
output.cssChunkFileNames
Pattern for naming CSS chunk files (non-entry CSS files).
Placeholders: [name], [hash]
Examples
export default {
output: {
cssChunkFileNames: 'styles/chunks/[name].[hash].css',
},
};sanitizeFileName
- Type:
boolean | ((name: string) => string) - Default:
true - Path:
output.sanitizeFileName
Controls sanitization of file names to ensure they're valid across different file systems.
Examples
export default {
output: {
sanitizeFileName: (name) => {
return name.replace(/[^a-zA-Z0-9.-]/g, '_');
},
},
};In-depth
The available options:
false: Disable sanitizationtrue: Enable default sanitization- Function: Custom sanitization logic
minify
- Type:
boolean | 'dce-only' | MinifyOptions - Default:
false - Path:
output.minify
Control code minification.
Examples
export default {
output: {
minify: true,
},
};In-depth
The available options:
false: Disable minificationtrue: Enable full minification'dce-only': Only dead code elimination- Object: Fine-grained minification settings
name
- Type:
string - Optional: Yes ✅
- Path:
output.name
The global variable name for the bundle. Required when using iife or umd format.
Examples
export default {
output: {
format: 'iife',
name: 'MyLibrary',
},
};globals
- Type:
Record<string, string> | ((name: string) => string) - Optional: Yes ✅
- Path:
output.globals
Maps external module IDs to global variable names for iife and umd formats.
Examples
export default {
external: ['react', 'react-dom'],
output: {
format: 'iife',
name: 'MyApp',
globals: {
'react': 'React',
'react-dom': 'ReactDOM',
},
},
};paths
- Type:
Record<string, string> | ((id: string) => string) - Optional: Yes ✅
- Path:
output.paths
Maps external module IDs to paths. Useful for loading dependencies from CDNs.
Examples
export default {
external: ['d3', 'lodash'],
output: {
paths: {
'd3': 'https://cdn.jsdelivr.net/npm/d3@7',
'lodash': 'https://cdn.jsdelivr.net/npm/lodash@4',
},
},
};generatedCode
- Type:
Partial<GeneratedCodeOptions> - Default:
{} - Path:
output.generatedCode
Configuration for the generated code output. See output.generatedCode for nested options.
externalLiveBindings
- Type:
boolean - Default:
true - Path:
output.externalLiveBindings
When true, generates code that supports live bindings for external imports.
Examples
export default {
output: {
externalLiveBindings: false,
},
};inlineDynamicImports
- Type:
boolean - Default:
truefor 'iife' and 'umd' formats,falseotherwise - Path:
output.inlineDynamicImports
When true, dynamic imports are inlined into the main bundle instead of being split into separate chunks.
Examples
export default {
output: {
inlineDynamicImports: true,
},
};manualChunks
- Type:
(moduleId: string, meta: { getModuleInfo: (moduleId: string) => ModuleInfo | null }) => string | NullValue - Optional: Yes ✅
- Path:
output.manualChunks
Deprecated
This option is deprecated. Please use output.advancedChunks instead.
Allows manual control over chunk creation.
advancedChunks
- Type:
object - Optional: Yes ✅
- Path:
output.advancedChunks
Advanced chunking configuration. See output.advancedChunks for nested options.
legalComments
- Type:
'none' | 'inline' - Default:
'inline' - Path:
output.legalComments
Control comments in the output.
Examples
export default {
output: {
legalComments: 'inline',
},
};In-depth
The available options:
'none': Remove all comments'inline': Preserve comments containing@license,@preserve, or starting with//!or/*!
polyfillRequire
- Type:
boolean - Default:
true - Path:
output.polyfillRequire
When true, adds a polyfill for require() function in non-CommonJS formats.
Examples
export default {
output: {
format: 'esm',
polyfillRequire: true,
},
};hoistTransitiveImports
- Type:
boolean - Default:
true - Path:
output.hoistTransitiveImports
When false, prevents hoisting transitive imports to entry chunks.
Examples
export default {
output: {
hoistTransitiveImports: false,
},
};preserveModules
- Type:
boolean - Default:
false - Path:
output.preserveModules
When true, preserves the module structure instead of creating a single bundle.
Examples
export default {
input: 'src/index.js',
output: {
dir: 'dist',
preserveModules: true,
},
};virtualDirname
- Type:
string - Optional: Yes ✅
- Path:
output.virtualDirname
Virtual directory name for resolving __dirname and __filename in the output.
Examples
export default {
output: {
virtualDirname: '/virtual',
},
};preserveModulesRoot
- Type:
string - Optional: Yes ✅
- Path:
output.preserveModulesRoot
Base path to use when preserving modules. All preserved modules will be placed relative to this path.
Examples
export default {
output: {
dir: 'dist',
preserveModules: true,
preserveModulesRoot: 'src',
},
};topLevelVar
- Type:
boolean - Default:
false - Path:
output.topLevelVar
When true, uses var declarations at the top level instead of function expressions.
Examples
export default {
output: {
topLevelVar: true,
},
};cleanDir
- Type:
boolean - Default:
false - Path:
output.cleanDir
Clean the output directory before emitting output. See output.cleanDir for detailed information.
minifyInternalExports
- Type:
boolean - Default:
false - Path:
output.minifyInternalExports
Whether to minify internal exports (exports not used by other chunks).
Examples
export default {
output: {
minifyInternalExports: true,
},
};keepNames
- Type:
boolean - Default:
false - Path:
output.keepNames
Preserve function and class names during bundling.
Examples
export default {
output: {
keepNames: true,
},
};In-depth
When enabled, the bundler will preserve the original names of functions and classes in the output, which is useful for:
- Debugging and error stack traces
- Code that relies on
Function.prototype.name - Serialization that depends on constructor names