关于 tsdown
tsdown 是基于 Rolldown 构建的 TypeScript 和 JavaScript 库打包器,面向库开发者。它提供多种模块格式、声明文件生成和 package.json 导出配置,并带有默认构建设置。
主要功能
- 01生成 ESM、CJS、IIFE 和 UMD 格式
- 02生成 TypeScript 声明文件
- 03生成 package.json 导出配置
- 04监视文件并自动重新构建
- 05运行包校验并生成体积报告
适用场景
- 01为 npm 打包 TypeScript 库
- 02以 ESM 和 CJS 格式发布包
- 03通过监视模式构建命令行工具
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oakoss/ agent-skills --skill tsdown安装后在 Claude Code 中输入/tsdown确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/advanced-features.mdconfiguration.mddeclaration-files.md详细介绍
tsdown
概述
tsdown 是一个基于 Rolldown(基于 Rust)构建的优雅库打包器,为构建 TypeScript 和 JavaScript 库提供完整的开箱即用解决方案。它负责源码转换、生成多种输出格式(ESM、CJS、IIFE、UMD)、生成 TypeScript 声明文件,以及生成 package.json 的 exports 字段,并提供合理的默认配置。
适用场景: 为 npm 构建 TypeScript 库、生成声明文件、生成同时支持 ESM/CJS 的包、打包 CLI 工具、以监听模式开发库、从 tsup 迁移。
不适用场景: 应用打包(直接使用 Vite/Rolldown)、服务端渲染框架(使用框架的打包器)、需要 Webpack 特定功能的项目、无需打包的简单脚本。
快速参考
| 模式 | API | 要点 |
|---|---|---|
| 基本构建 | npx tsdown | 自动检测 src/index.ts 入口 |
| 配置文件 | tsdown.config.ts | 使用 defineConfig() 确保类型安全 |
| 入口点 | entry: ['src/index.ts'] | 使用字符串、数组或对象指定具名入口 |
| 输出格式 | format: ['esm', 'cjs'] | 支持 ESM、CJS、IIFE、UMD |
| 声明文件 | dts: true | 从 package.json 的 types 字段自动检测 |
| 固定扩展名 | fixedExtension: true | 强制使用 .mjs/.cjs 和 .d.mts/.d.cts |
| 外部依赖 | external: ['react'] | 默认将 node_modules 设为外部依赖 |
| 打包依赖 | noExternal: ['lodash-es'] | 强制打包指定依赖 |
| 目标 | target: 'node18' | ES 版本或 Node 版本 |
| 平台 | platform: 'node' | node、browser 或 neutral |
| 压缩 | minify: true | 单独启用摇树优化 |
| 摇树优化 | treeshake: true | 消除无用代码 |
| Source Map | sourcemap: true | 内联或外部 Source Map |
| 监听模式 | tsdown --watch | 文件更改时自动重新构建 |
| 清理输出 | clean: true | 构建前移除输出目录 |
| 验证 | --publint --attw | 构建后检查包质量 |
| 大小报告 | --report | 显示 gzip/brotli 压缩统计的包大小 |
| 多个配置 | defineConfig([...]) | 使用配置数组生成不同输出 |
| 动态配置 | defineConfig((opts) => {}) | 接收 CLI 选项的函数 |
| 编程式 API | import { build } | 在 Node.js 脚本中使用 |
| 页眉/页脚 | banner: { js: '...' } | 在输出文件开头添加或末尾追加内容 |
| onSuccess 钩子 | onSuccess: async () => {} | 构建成功后运行 |
| Node 协议 | nodeProtocol: true | 为内置模块导入添加或移除 node: 前缀 |
常见错误
| 错误 | 正确做法 |
|---|---|
使用双格式时未设置 fixedExtension | 同时发布 ESM 和 CJS 时,对 .mjs/.cjs 使用 fixedExtension: true |
| 将所有 node_modules 打包到库输出中 | 默认情况下依赖项为外部依赖;仅对特定依赖使用 noExternal |
未配置 TypeScript 就使用 dts: true | 确保存在 tsconfig.json,且包含正确的 compilerOptions |
为现代语法设置过低的 target | 将 target 与最低支持的 Node/浏览器版本保持一致 |
package.json 中缺少 types 字段 | 添加 types 或 exports 中的 types 条件以解析声明 |
| 更改格式前未清理输出 | 使用 clean: true,避免残留之前构建的文件 |
为 Node 内置模块内联设置 external | 在 platform: 'node' 下,Node 内置模块(如 node:fs)会自动标记为外部依赖 |
| 在 CI 中使用交互式 CLI 标志 | CI 构建时使用配置文件或非交互式 CLI 标志 |
委派
- 构建配置审查:使用
Taskagent 分析 tsdown 配置是否正确 - 包发布:使用
Exploreagent 验证 package.json 的 exports 和 types 字段 - 从 tsup 迁移:使用
Taskagent 将 tsup 选项映射为对应的 tsdown 选项
参考资料
评论
支持 Markdown