Skip to content

构建工具

tsup 和 Rollup

tsup 和 Rollup都是前端/Node.js 项目中的打包工具,常用于构建 TypeScript 库、工具或组件库,但它们在设计理念、性能、扩展性和适用场景上有明显区别

🧠 简要概括

特性tsupRollup
构建速度🚀 极快(基于 esbuild)🐢 较慢(AST 转换,基于插件系统)
配置复杂度🌟 零配置起步,适合快速开发⚙️ 配置复杂,适合高度定制
插件系统简单或不可扩展(依赖 esbuild 插件)非常强大、生态成熟(大量插件)
输出格式ESM / CJS / IIFEESM / CJS / IIFE / AMD 等
Tree-shaking✅ 自动支持(通过 esbuild)✅ 高度优化,原生支持
代码分割❌ 默认关闭,支持有限(适合库,不适合应用)✅ 支持代码分割
打包类型声明✅ 内置(开启 dts: true❌ 需额外使用 tscrollup-plugin-dts
常见用途TypeScript 工具包 / CLI / 轻量组件库Vue/React 组件库 / 高度定制打包 / UMD 库
依赖体积较小通常较大(插件、babel)

✅ 使用场景对比

场景推荐工具理由
快速开发 TypeScript 库tsup快速、无需配置、内置支持 .d.ts
构建 CLI 工具(Node.js)tsup支持 shebang,目标明确,体积小
构建 React/Vue 组件库Rollup插件丰富、输出格式灵活、支持样式和图片等资源
构建大型前端库(含样式/国际化等)Rollup可扩展性强,适合复杂打包需求
多入口文件复杂项目Rollup更灵活的入口与输出控制
打包业务型 SPA 项目❌ 两者都不推荐推荐用 Vite/Webpack

🛠 实际使用体验对比

tsup 示例

bash
tsup src/index.ts --format esm,cjs --dts

或者用配置文件

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

Rollup 示例

js
// rollup.config.js
import typescript from '@rollup/plugin-typescript'

export default {
  input: 'src/index.ts',
  output: [
    { file: 'dist/index.esm.js', format: 'esm' },
    { file: 'dist/index.cjs.js', format: 'cjs' }
  ],
  plugins: [typescript()]
}

需要:

  • 安装 rollup、@rollup/plugin-typescript
  • 单独生成 .d.ts(如用 tsc 或 rollup-plugin-dts)

✅ 总结一句话

  • 如果你要 快速构建一个 TypeScript 工具包/库,用 tsup;
  • 如果你要构建一个 更复杂、可控性高的前端库或组件库,用 Rollup。