Files
stack/packages/mosaic/framework/skills/tsdown/references/option-cjs-default.md
T
fargo 1a822493ba format: apply repo prettier (3.8.1) to the folded skills tree
963 markdown files reformatted with the repository's pinned prettier so
pnpm format:check covers the folded tree like every other repo file.

The formatter's embedded-language pass also normalized code fences
(TS semicolons, closed HTML tags in examples, lowercased CSS hex colors,
one renumbered list that skipped an index). Alphanumeric token deltas vs
the fold commit were audited file-by-file; all are formatter-equivalent
markup normalizations plus the four sanitized skills.
2026-08-19 14:37:17 -05:00

1.9 KiB

CJS Default Export

Control how default exports are handled in CommonJS output.

Overview

The cjsDefault option improves compatibility when generating CommonJS modules. When enabled (default), modules with only a single default export use module.exports = ... instead of exports.default = ....

Type

cjsDefault?: boolean  // default: true

Basic Usage

Enabled (Default)

export default defineConfig({
  entry: ['src/index.ts'],
  format: ['cjs'],
  cjsDefault: true, // default behavior
});

Disabled

export default defineConfig({
  entry: ['src/index.ts'],
  format: ['cjs'],
  cjsDefault: false,
});

How It Works

With cjsDefault: true (Default)

When your module has only a single default export, tsdown transforms:

Source:

// src/index.ts
export default function greet() {
  console.log('Hello, world!');
}

Generated CJS:

// dist/index.cjs
function greet() {
  console.log('Hello, world!');
}
module.exports = greet;

Generated Declaration:

// dist/index.d.cts
declare function greet(): void;
export = greet;

This allows consumers to use const greet = require('your-module') directly.

With cjsDefault: false

The default export stays as exports.default:

// dist/index.cjs
function greet() {
  console.log('Hello, world!');
}
exports.default = greet;

Consumers need require('your-module').default.

When to Disable

  • When your module has both default and named exports
  • When you need consistent exports.default behavior
  • When consumers always use ESM imports

Tips

  1. Leave enabled for most libraries (default true)
  2. Disable if you have both default and named exports and need consistent behavior
  3. Test CJS consumers to verify compatibility