Files
agent-skills/skills/tsdown/references/option-output-directory.md
Jason Woltje f5792c40be feat: Complete fleet — 94 skills across 10+ domains
Pulled ALL skills from 15 source repositories:
- anthropics/skills: 16 (docs, design, MCP, testing)
- obra/superpowers: 14 (TDD, debugging, agents, planning)
- coreyhaines31/marketingskills: 25 (marketing, CRO, SEO, growth)
- better-auth/skills: 5 (auth patterns)
- vercel-labs/agent-skills: 5 (React, design, Vercel)
- antfu/skills: 16 (Vue, Vite, Vitest, pnpm, Turborepo)
- Plus 13 individual skills from various repos

Mosaic Stack is not limited to coding — the Orchestrator and
subagents serve coding, business, design, marketing, writing,
logistics, analysis, and more.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 16:27:42 -06:00

271 lines
4.4 KiB
Markdown

# Output Directory
Configure the output directory for bundled files.
## Overview
By default, tsdown outputs bundled files to the `dist` directory. You can customize this location using the `outDir` option.
## Basic Usage
### CLI
```bash
# Default output to dist/
tsdown
# Custom output directory
tsdown --out-dir build
tsdown -d lib
```
### Config File
```ts
export default defineConfig({
entry: ['src/index.ts'],
outDir: 'build',
})
```
## Common Patterns
### Standard Library
```ts
export default defineConfig({
entry: ['src/index.ts'],
format: ['esm', 'cjs'],
outDir: 'dist', // Default
dts: true,
})
```
**Output:**
```
dist/
├── index.mjs
├── index.cjs
└── index.d.ts
```
### Separate Directories by Format
```ts
export default defineConfig([
{
entry: ['src/index.ts'],
format: ['esm'],
outDir: 'dist/esm',
},
{
entry: ['src/index.ts'],
format: ['cjs'],
outDir: 'dist/cjs',
},
])
```
**Output:**
```
dist/
├── esm/
│ └── index.js
└── cjs/
└── index.js
```
### Monorepo Package
```ts
export default defineConfig({
entry: ['src/index.ts'],
outDir: 'lib', // Custom directory
clean: true,
})
```
### Build to Root
```ts
export default defineConfig({
entry: ['src/index.ts'],
outDir: '.', // Output to project root (not recommended)
clean: false, // Don't clean root!
})
```
**Warning:** Be careful when outputting to root to avoid deleting important files.
## Output Extensions
### Custom Extensions
Use `outExtensions` to control file extensions:
```ts
export default defineConfig({
entry: ['src/index.ts'],
format: ['esm', 'cjs'],
outDir: 'dist',
outExtensions({ format }) {
return {
js: format === 'esm' ? '.mjs' : '.cjs',
}
},
})
```
### Default Extensions
| Format | Default Extension | With `type: "module"` |
|--------|-------------------|----------------------|
| `esm` | `.mjs` | `.js` |
| `cjs` | `.cjs` | `.js` |
| `iife` | `.global.js` | `.global.js` |
| `umd` | `.umd.js` | `.umd.js` |
### ESM with .js Extension
```ts
export default defineConfig({
entry: ['src/index.ts'],
format: ['esm'],
outExtensions: () => ({ js: '.js' }),
})
```
Requires `"type": "module"` in package.json.
## File Naming
### Entry Names
Control output filenames based on entry names:
```ts
export default defineConfig({
entry: {
index: 'src/index.ts',
utils: 'src/utils.ts',
},
outDir: 'dist',
})
```
**Output:**
```
dist/
├── index.mjs
└── utils.mjs
```
### Glob Entry
```ts
export default defineConfig({
entry: ['src/**/*.ts', '!**/*.test.ts'],
outDir: 'dist',
unbundle: true, // Preserve structure
})
```
**Output:**
```
dist/
├── index.mjs
├── utils/
│ └── helper.mjs
└── components/
└── button.mjs
```
## Multiple Builds
### Same Output Directory
```ts
export default defineConfig([
{
entry: ['src/index.ts'],
outDir: 'dist',
clean: true, // Clean first
},
{
entry: ['src/cli.ts'],
outDir: 'dist',
clean: false, // Don't clean again
},
])
```
### Different Output Directories
```ts
export default defineConfig([
{
entry: ['src/index.ts'],
format: ['esm', 'cjs'],
outDir: 'dist/lib',
},
{
entry: ['src/cli.ts'],
format: ['esm'],
outDir: 'dist/bin',
},
])
```
## CLI Examples
```bash
# Default
tsdown
# Custom directory
tsdown --out-dir build
tsdown -d lib
# Nested directory
tsdown --out-dir dist/lib
# With other options
tsdown --out-dir build --format esm,cjs --dts
```
## Tips
1. **Use default `dist`** for standard projects
2. **Be careful with root** - avoid `outDir: '.'`
3. **Clean before build** - use `clean: true`
4. **Consistent naming** - match your project conventions
5. **Separate by format** if needed for clarity
6. **Check .gitignore** - ensure output dir is ignored
## Troubleshooting
### Files Not in Expected Location
- Check `outDir` config
- Verify build completed successfully
- Look for typos in path
### Files Deleted Unexpectedly
- Check if `clean: true`
- Ensure outDir doesn't overlap with source
- Don't use root as outDir
### Permission Errors
- Check write permissions
- Ensure directory isn't locked
- Try different location
## Related Options
- [Cleaning](option-cleaning.md) - Clean output directory
- [Entry](option-entry.md) - Entry points
- [Output Format](option-output-format.md) - Module formats
- [Unbundle](option-unbundle.md) - Preserve structure