Configuration
tship can be configured via:
tshipproperty intsconfig.json(simple projects)tship.config.tsfile (advanced with plugins)- CLI options (overrides for specific builds)
Activation
tship runs in plain tsc mode until you add at least one meaningful option:
formats, outDirs, outDir, autoExports, plugins, cjsModule, cjsModuleResolution, esmModule, or esmModuleResolution.
An empty "tship": {} is treated the same as no configuration.
Priority
CLI options > tship.config.ts > tsconfig.json > tsconfig compilerOptionsOptions
| Option | Type | Default | Description |
|---|---|---|---|
formats | ("cjs"|"esm")[] | ["esm"] (only when tship is active) | Output formats |
outDirs | { cjs?: string; esm?: string } | follows compilerOptions.outDir | Custom output directories per format |
outDir | string | – | Single directory for all formats (overrides outDirs) |
autoExports | boolean | AutoExportsOptions | false | Auto-update package.json exports |
plugins | TshipPlugin[] | [] | Build pipeline plugins |
project | string | auto-detected | Path to tsconfig.json |
cjsModule | string | "CommonJS" | Override module for CJS builds (must be "CommonJS") |
cjsModuleResolution | string | "Node10" | Override moduleResolution for CJS builds (must be "Node10") |
esmModule | string | "ESNext" | Override module for ESM builds |
esmModuleResolution | string | "NodeNext" | Override moduleResolution for ESM builds |
Output directory resolution
- If
tship.outDiris given → all formats go there. - Else if
tship.outDirshas entries → they are used (with defaults for missing keys). - Else if
compilerOptions.outDiris set in tsconfig → both formats share that directory. - Else →
dist/cjsanddist/esmare created.
When multiple formats share the same directory, tship renames files (.cjs/.mjs) to avoid conflicts.
Example: Use tsconfig.json outDir directly
{
"compilerOptions": { "outDir": "./build" },
"tship": { "formats": ["cjs", "esm"] }
}Output: ./build/index.cjs, ./build/index.mjs, etc.