CJS 默认导出
cjsDefault 选项用于提升生成 CommonJS (CJS) 入口模块时的兼容性。该选项默认启用。
工作原理
当显式入口模块仅有一个默认导出且输出格式为 CJS 时,tsdown 会自动将:
export default ...转换为module.exports = ...(在生成的 JavaScript 文件中)。
对于 TypeScript 声明文件(.d.ts),则会将:
export default ...转换为export = ...
这样可以确保使用 CommonJS 的 require 语法(require('your-module'))的用户能够直接获得默认导出,从而提升与相关工具和环境的兼容性。
NOTE
cjsDefault 仅适用于显式入口模块。在非打包模式下,作为非入口 chunk 输出的被导入模块仍会保留 exports.default 等具名 CJS 导出。CJS 已被视为旧版格式,仅处于维护模式,因此这一行为不会扩展到非入口 chunk。
如果每个源模块都需要被独立使用,请将它们全部配置为入口:
ts
import { defineConfig } from 'tsdown'
export default defineConfig({
entry: ['src/**/*.ts'],
root: 'src',
format: 'cjs',
unbundle: true,
})示例
源模块:
ts
// src/index.ts
export default function greet() {
console.log('Hello, world!')
}生成的 CJS 输出:
js
// dist/index.cjs
function greet() {
console.log('Hello, world!')
}
module.exports = greet生成的声明文件:
ts
// dist/index.d.cts
declare function greet(): void
export = greet