tsup默认只输出CJS格式(dist/index.js)且不生成.d.ts,因设计上优先最小可行输出;需显式配置format:["cjs","esm"]和dts:true才能多格式+类型声明。

tsup 能直接替代 tsc + rollup 构建库,但「多格式一键输出」不是开箱即用——必须显式指定 --format,否则只出 CJS。
为什么 npm run build 只生成 .js 却没有 .mjs 和 .d.ts
默认行为是只输出 CommonJS 格式(dist/index.js),不带类型声明、不生成 ESM。这不是 bug,是设计取舍:tsup 优先保证最小可行输出,避免隐式行为导致发布污染。
-
--format cjs,esm必须写全,缺一不可;只写--format esm会丢掉 CJS 兼容层 -
--dts是独立开关,不加就不会生成dist/index.d.ts,哪怕你源码里写了export *或declare module - 若入口是
src/index.ts,但package.json的"main"指向"dist/index.js",而"exports"缺失,则 Node.js 14+ 无法自动选中 ESM 入口——得手动补"exports": { ".": { "import": "./dist/index.mjs", "require": "./dist/index.js" } }
tsup.config.ts 里哪些配置项最常改
零配置只适用于极简场景。真实项目几乎立刻要动这三项:
ZenHeart zenlink 与 zenlink-mcp 为 OpenClaw,涵盖安装、MCP 注册、钩子接线、入站轮询及升级维护。
-
entry:默认只认src/index.ts,多个入口(如 CLI + library)必须显式列出数组:["src/index.ts", "src/cli.ts"] -
format:不能依赖命令行传参,CI 环境容易漏;写死在 config 里更稳:format: ["cjs", "esm"] -
dts:设为true启用类型生成;若需排除某些路径(如测试类型),得配dts: { only: ["src/index.ts"] }
注意:minify: true 在生产构建时才开,开发阶段关掉——否则报错堆栈无法映射回源码。
VSCode 调试时断点失效,和 tsup 有什么关系
tsup 默认不生成 .map 文件,且输出的是纯 JS(非 TS 编译产物),所以 VSCode 的 Node.js 调试器找不到源映射。这不是配置错误,是默认关闭调试支持。
- 加
--sourcemap参数(命令行)或sourcemap: true(config)才能生成.js.map -
launch.json中的outFiles必须匹配输出路径,例如:"${workspaceFolder}/dist/**/*.js",不能写成build或lib - 别指望
program直接指向.ts文件——tsup 不处理 TS 源码调试,它只打包;要边写边调,该用ts-node --inspect配合 nodemon
真正麻烦的不是配置项多,而是每个输出格式(CJS/ESM)和类型声明(.d.ts)各自有独立的启用开关,且它们之间不联动。漏一个,下游用户就可能遇到 Cannot find module 或 has no exported member —— 这些错误不会在本地构建时报出来,只会在别人 import 你的包时爆发。

















