tsdown vs tsup
TypeScript 库打包工具选型指南
tsdowntsup

TypeScript 库打包工具选型指南

tsuptsdown 都是由 egoist 开发的零配置 TypeScript 库打包工具,旨在简化 npm 包的构建流程。tsup 基于 esbuild,拥有成熟的社区和稳定的性能,是目前的主流选择。tsdown 基于 Rolldown(Rust 编写),旨在兼容 Rollup 插件生态并提供更快的构建速度,代表了未来的技术方向。两者都支持 CLI、配置文件、类型生成和监听模式,但在底层引擎和插件兼容性上存在关键差异。

npm下载趋势

3 年

GitHub Stars 排名

统计详情

npm包名称
下载量
Stars
大小
Issues
发布时间
License
tsdown03,826161 kB3813 天前MIT
tsup011,200390 kB3955 个月前MIT

tsdown vs tsup:底层引擎与生态兼容性深度对比

tsdowntsup 都是为了解决同一个问题而生的:如何快速、简单地打包 TypeScript 库。它们都由同一位作者(egoist)维护,配置风格也非常相似,但底层核心完全不同。tsup 基于 esbuild(Go 编写),而 tsdown 基于 Rolldown(Rust 编写)。这意味着它们在插件系统、构建速度和长期维护方向上有着本质的区别。让我们从实际开发场景出发,看看该如何选择。

🚀 核心引擎:Go vs Rust

tsup 使用 esbuild 作为底层打包引擎。

  • 速度极快,已经是行业标杆。
  • 生态成熟,但插件系统与 Rollup 不兼容。
# tsup: 基于 esbuild
tsup src/index.ts --format cjs,esm

tsdown 使用 Rolldown 作为底层打包引擎。

  • 旨在提供与 Rollup 兼容的插件接口。
  • 基于 Rust,理论上性能上限更高,是 Vite 生态的未来方向。
# tsdown: 基于 Rolldown
tsdown src/index.ts --format cjs,esm

⚙️ 配置文件:几乎相同但包名不同

两者的配置体验非常接近,都支持 TypeScript 配置文件,主要区别在于导入的包名。

tsup 需要从 tsup 包导入配置工具。

  • 配置项稳定,社区示例多。
// tsup.config.ts
import { defineConfig } from 'tsup';

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

tsdown 需要从 tsdown 包导入配置工具。

  • 配置项设计与 tsup 高度一致,降低迁移成本。
// tsdown.config.ts
import { defineConfig } from 'tsdown';

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

🔌 插件系统:关键分歧点

这是两者最大的区别。如果你需要特定的构建插件,这一点将决定你的选型。

tsup 支持 esbuild 插件。

  • 适合简单的转换需求。
  • 无法直接使用庞大的 Rollup 插件库。
// tsup: 使用 esbuild 插件
import { defineConfig } from 'tsup';
import someEsbuildPlugin from 'esbuild-plugin-some';

export default defineConfig({
  esbuildPlugins: [someEsbuildPlugin()],
  entry: ['src/index.ts']
});

tsdown 支持 Rollup 插件。

  • 可以直接复用现有的 Rollup 插件生态。
  • 适合需要复杂构建逻辑的项目。
// tsdown: 使用 Rollup 插件
import { defineConfig } from 'tsdown';
import someRollupPlugin from 'rollup-plugin-some';

export default defineConfig({
  plugins: [someRollupPlugin()],
  entry: ['src/index.ts']
});

📦 类型定义生成 (DTS)

两者都内置了类型定义生成能力,无需额外配置 tsc

tsup 通过 dts: true 开启。

  • 底层调用 typescript 编译器。
  • 稳定可靠,支持 dts-resolver 等高级选项。
// tsup: 开启 DTS
tsup src/index.ts --dts

tsdown 同样通过 dts: true 开启。

  • 旨在提供更快的类型生成速度。
  • 接口保持一致,方便切换。
// tsdown: 开启 DTS
tsdown src/index.ts --dts

🛡️ 成熟度与维护状态

tsup 是目前的生产级标准。

  • 下载量大,社区问题解答多。
  • 适合不想在构建工具上花费精力的团队。
# tsup: 稳定版本
tsup --version
# 输出稳定版本号,如 8.x

tsdown 是新兴的挑战者。

  • 仍处于快速迭代期。
  • 适合愿意承担少量风险以换取未来兼容性的团队。
# tsdown: 早期版本
tsdown --version
# 版本号可能较小,如 0.x

🤝 相似之处:共享的设计哲学

尽管底层不同,但两者在用户体验上保持了高度一致。

1. 📂 零配置启动

  • 都支持直接运行 CLI 而不需要配置文件。
  • 默认输出 ESM 和 CJS 格式。
# 两者都支持直接运行
tsup src/index.ts
tsdown src/index.ts

2. 👀 监听模式

  • 都支持 --watch 参数,开发体验流畅。
  • 支持热重载构建结果。
# 两者都支持监听
tsup src/index.ts --watch
tsdown src/index.ts --watch

3. 🧩 代码分割

  • 都支持 --splitting 选项。
  • 适合大型库的按需加载优化。
// 两者配置相似
export default defineConfig({
  splitting: true,
  entry: ['src/index.ts']
});

📊 总结:核心差异对比

特性tsuptsdown
底层引擎🟩 esbuild (Go)🦀 Rolldown (Rust)
插件生态🔌 esbuild 插件🔌 Rollup 插件
成熟度🛡️ 生产级稳定🚧 快速迭代中
配置方式📝 tsup.config.ts📝 tsdown.config.ts
未来方向维持现状Vite/Rolldown 生态统一
社区规模👥 大👥 增长中

💡 最终建议

tsup 就像是一把经过千锤百炼的瑞士军刀 🇨🇭 —— 可靠、锋利、随手可用。如果你的目标是今天就把库发布出去,并且不想在构建工具上遇到意外,选 tsup 是最稳妥的决定。它在绝大多数场景下都能完美工作。

tsdown 就像是一把正在打磨的新式激光切割器 🔦 —— 代表了更先进的方向和更强的兼容性潜力。如果你已经深度依赖 Rollup 插件,或者希望你的工具链与 Vite 5+ 及未来的 Rolldown 生态保持一致,那么现在介入 tsdown 是一个有前瞻性的选择。

核心结论:对于大多数现有项目,继续使用 tsup 直到有明确的迁移需求。对于全新项目且团队技术嗅觉敏锐,可以尝试 tsdown 以享受 Rollup 插件兼容性带来的便利。

如何选择: tsdown vs tsup

  • tsdown:

    选择 tsdown 如果你需要兼容 Rollup 插件生态,或者希望提前适配基于 Rust 的新工具链。它适合愿意尝试新技术、关注 Vite/Rolldown 生态统一性的团队,但在生产环境使用前建议仔细评估其成熟度。

  • tsup:

    选择 tsup 如果你的项目需要生产级的稳定性,或者你已经习惯使用 esbuild 插件生态。它经过大量项目验证,文档丰富,适合大多数现有的 TypeScript 库开发场景,尤其是当你不需要特定的 Rollup 插件时。

tsdown的README

tsdown

tsdown

Open on npmx npm downloads Unit Test tsdown Starter StackBlitz

✨ The elegant bundler for libraries powered by Rolldown.

Features

  • 🚀 Blazing fast: Build and generate declaration files powered by Oxc and Rolldown, incredibly fast!
  • ♻️ Powerful ecosystem: Support Rollup, Rolldown, unplugin plugins, and some Vite plugins.
  • ️🛠️ Easy to use: tsdown preconfigures everything you need to get started, so you can focus on writing code.
  • 🔄 Seamless migration: Compatible with tsup's main options and features, ensuring a smooth transition.

Documentation

For full documentation, visit tsdown.dev.

Install

npm i -D tsdown

Usage

npx tsdown

Sponsors

Licenses

This project is licensed under the MIT License.