关于 tsdown
面向使用 tsdown 构建 TypeScript 库的开发者工作流 Skill,涵盖构建、类型声明、导出、依赖和从 tsup 迁移。它侧重当前 API,并指导检查构建产物及包的实际使用。
主要功能
- 01构建配置与 CLI 指引
- 02类型声明和导出配置指引
- 03依赖打包控制
- 04插件、CSS 与工作区指导
- 05tsup 和版本迁移指引
适用场景
- 01配置 TypeScript 库构建
- 02检查生成的类型声明和导出
- 03调整依赖外部化方式
- 04将项目从 tsup 迁移
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dobroslavradosavljevic/ skills --skill tsdown安装后在 Claude Code 中输入/tsdown确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreferences/config-cli.mddts-exports-deps.mdmigrate-from-tsup.mdplugins-css-workspace.mdsource-map.mdusage-guide.md详细介绍
tsdown
当工作涉及 tsdown 时使用此技能:库构建、tsdown.config、dts/exports、依赖外置、watch/unbundle、CSS/插件/工作区、从 0.22 升级到 0.23,或从 tsup 迁移。
快照:[email protected](2026-10-01)。如果版本不同,请根据 source-map.md 刷新内容。
工作流
- 检查本地 tsdown 配置:
- 包版本(优先使用
[email protected];此快照为 0.23.0)。运行此工具所需的 Node 版本:^22.18.0 || ^24.11.0 || >=26.0.0(0.23 中已不再支持 Node 25)。 - 配置:
tsdown.config.ts/package.json#tsdown;对等依赖(typescript、@tsdown/css、publint等)。 package.json中的type、exports、types、engines.node(用于目标版本/dts 自动检测)。- 是否正在从 tsup 迁移(
external、entryPoints、bundle: false等)。
- 包版本(优先使用
- 日常使用方法请先参考 usage-guide.md。
- 版本不一致时刷新文档。请从 source-map.md 开始。
- 按需查阅更深入的细节:
- 配置/CLI/默认值:config-cli.md。
- dts、包 exports、依赖:dts-exports-deps.md。
- 插件、CSS、复制、工作区、编程式用法:plugins-css-workspace.md。
- tsup 迁移和从 0.22 升级到 0.23:migrate-from-tsup.md。
- 优先使用当前 API:
entry、deps.neverBundle/alwaysBundle/onlyBundle、unbundle、copy、cjsDefault、dts.generator。将 CJS 视为维护模式;新库优先采用纯 ESM。 - 使用
bunx tsdown(或项目的build)验证,检查dist和exports/types,然后通过 smoke import 使用该包。
核心判断
- tsdown 是基于 Rolldown + Oxc 的库打包器,是 tsup 的精神继承者,而非应用打包器。
- 默认值与 tsup 不同:
format: 'esm'、clean: true;dts 通常根据package.json的 types/exports 自动检测;target 根据engines.node确定。 - 优先使用
deps.neverBundle/alwaysBundle,而非已弃用的external/noExternal(0.23 中仍接受这些选项;同时设置两种形式会报错)。 - 0.23 移除了与 tsup 兼容的选项(
bundle、outExtension、publicDir、removeNodeProtocol、injectStyle、inlineOnly、skipNodeModulesBundle、deps.onlyAllowBundle、dts.cjsReexport);这些选项会导致类型检查失败,并在运行时被忽略。 - 默认依赖策略:包的 dependencies/peers 会被外置;已使用的 devDependencies 可能会被打包——行为不符合预期时,使用
deps覆盖。 - 生成 dts 需要安装
typescript。仅通过dts.generator: 'oxc' | 'tsc' | 'tsgo'选择生成器(省略时:若启用了isolatedDeclarations,则使用oxc;若安装了 TypeScript 7,则使用tsgo;否则使用tsc)。dts.oxc: true/dts.tsgo: true不再用于选择生成器。 - 0.23 中
deps.resolveDepSubpath默认值为false——外置子路径会保持原样。 build()会返回一个句柄:const { bundles, watch } = await build(...)。- 使用
@tsdown/css/@tsdown/exe时,其版本必须与tsdown一致。 - 不支持 stub 模式——请使用
--watch和/或exports.devExports。 - 代码拆分始终开启——没有
splitting: false。 - 从 0.22 或 tsup 升级:先在 0.22.14 上构建一次,确保没有弃用警告,然后升级到 0.23(
tsdown-migrate在第一阶段会固定使用 0.22.14)。 - 命令示例优先使用
bun/bunx。
验证
优先使用仓库自有的命令。对于有意义的 tsdown 工作,覆盖相关子集:
- 运行
bunx tsdown --version,并确认 CLI 的 Node 引擎要求。 - 干净构建:运行
bunx tsdown/bun run build;检查dist中的格式和扩展名(.mjs/.cjs/.js)。 - 类型:从依赖包中使用
.d.ts/exports.types,或运行tsc。 - 双格式:当
format同时包含两种格式时,执行 require + import 冒烟测试。 - 使用
exports: true后:如果已启用,通过 publint/attw 验证package.json。 - 迁移:升级到 0.23 前,确保 0.22.14 没有弃用警告;升级后,不再有已移除的选项,且
attw仍能通过(默认配置现在为esm-only)。
说明运行了哪些检查、未运行哪些检查,以及仍存在哪些版本假设。
评论
支持 Markdown