tsup 打包工具

基于 esbuild 的库打包工具,适合快速产出 JavaScript 构建结果,但复杂库的类型声明策略通常仍需单独设计。

#tech / dev #resource / tsup #type / resource #status / growing #media / tool #purpose / development

[!info] related notes

tsup 打包工具

这是什么

tsup 是基于 esbuild 的库打包工具,擅长用较少配置快速产出:

  • ESM / CJS JavaScript
  • sourcemap
  • watch 模式下的快速反馈

它特别适合:

  • 工具库
  • CLI
  • monorepo 里的轻量共享包

适用平台 / 适用场景

更常见的适用场景是:

  • 以库构建为主,而不是复杂应用打包
  • 追求较快构建速度和较低配置成本
  • 运行时代码产物比复杂资源处理更重要

如果项目是复杂前端应用,通常还是先看 Vite、Webpack 或更重型的构建链。

核心特点

  • 基于 esbuild,速度通常很快
  • 多入口和多格式输出配置相对直接
  • 适合作为 monorepo 中库的 JS 构建器
  • 对简单库来说,dts 也能带来不错的开箱体验

常见用途

轻量库

对依赖图较浅的包,下面这种写法通常已经够用:

import { defineConfig } from 'tsup';

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

复杂库

当一个库开始出现:

  • 多入口
  • 深层跨包依赖
  • 复杂类型导出
  • monorepo 中开发态 / 构建态解析分层

更稳的做法通常不是继续把所有事都塞给 tsup,而是:

  • tsup 只负责 JS
  • tsc --emitDeclarationOnly 单独负责 DTS

详见 库构建中 JS 打包与 DTS 生成分层

核心特点 / 优势 / 局限

优势

  • 上手成本低
  • 适合快速搭出库构建链
  • 对纯 TypeScript 工具库很顺手

局限

  • 复杂资源处理能力不如更重的 bundler 生态
  • DTS 策略到了复杂库阶段通常需要单独设计
  • 如果包边界和声明生成要求很严格,只靠 dts: true 不一定够

相关 howto / MOC / 官方链接

创建于 2025/12/24 更新于 2026/5/27