跳到主要内容

tsup/tsdown等一些新打包工具的应用场景

AI突然介绍的。 官网, Bundle your TypeScript library with no config, powered by esbuild.

顺藤摸瓜,又发现: tsdown 官方介绍: tsdown 是优雅的库构建工具。它以简洁和高效为设计理念,为您的 TypeScript 和 JavaScript 库提供无缝且高效的打包方式。无论您正在构建小型工具库还是复杂的功能库,tsdown 都能让您专注于核心代码开发,同时以优雅的方式处理打包流程。 这里还涉及一个叫rolldown的东西。 这两个都是Rust做的,所以都挺新的。

一些对比:

维度RollupRolldown
语言JavaScriptRust
性能OK数量级提升
架构模块图原生
并行几乎无天然并行
未来维护演进核心

问:我现在主要开发expo/nextjs项目,偶尔做npm开源包和github package私有包等,这些工具应该怎么用怎么选?还是没必要,就用框架默认自带的打包工具?

ChatGPT回答:

一、先给你一句总原则(非常重要)

应用项目:用框架给你的
库 / 包:用专门的库构建工具
不要混用心智模型

这是 90% 工程混乱的根源。


二、放到你的真实场景里看(Expo + Next.js)

你现在的场景是:

  • ✅ Expo(React Native)

  • ✅ Next.js(Web / SSR)

  • ➕ 偶尔发 npm 开源包

  • ➕ 偶尔发 GitHub private package

我们逐个说。


三、Expo / Next.js 项目:别动,别折腾

❌ 不要做的事

  • ❌ 不要自己配 Rollup / tsup

  • ❌ 不要为了“统一工具链”瞎换

  • ❌ 不要把“库构建思维”用到 App

✅ 正确姿势

Next.js

SWC + Turbopack / Webpack(框架托管)

你关心的只是:

  • next build

  • next dev

👉 Next.js 本身就是“最终产物”构建器


Expo

Metro bundler(RN 世界的事实标准)

你需要做的只有:

  • expo start

  • expo build

👉 Metro 是为 RN runtime 量身定做的,外部工具替代不了。


🚨 结论

应用项目:100% 用框架默认

任何“为了更快 / 更统一”的自定义,长期都会反噬你。


四、那 npm / GitHub package 呢?(重点)

这里才是 tsup / tsdown / Vite 的用武之地


五、给你一套“工具使用矩阵”(直接照着用)

🟢 场景 1:偶尔发 npm 包(最常见)

比如:

  • hooks

  • utils

  • 小组件

  • Expo / Next 共用逻辑

👉 首选:tsup

简单
稳定
心智负担最低

📌 不论 npm 还是 GitHub Packages,都一样。


🟢 场景 2:React Web 组件库(有样式)

👉 Vite lib mode

原因:

  • CSS / SVG / asset 友好

  • 可加 playground

  • 跟 Web 生态贴合


🟡 场景 3:长期维护的公共库(高级)

当你开始遇到这些问题:

  • 多入口 API

  • 严格 tree-shaking

  • exports 设计

  • 大用户量

👉 再考虑 tsdown

⚠️ 这是“升级选项”,不是起点。


六、Expo / RN 场景的特殊提醒(非常重要)

❗ RN 包 ≠ Web 包

如果你发的是:

给 Expo / React Native 用的 npm 包

你要注意:

1️⃣ 不要打包成浏览器产物
2️⃣ 保留 ESM 源码更友好
3️⃣ Metro 对 CJS / exports 支持有限

推荐方式(RN 包)

TypeScript → ESM
不强制 bundle

很多 RN 库甚至:

  • 直接发 src

  • 或只做轻编译(tsc)

👉 不要过度打包 RN 包


七、GitHub Packages(私有包)有什么不同?

实际上:几乎没不同

项目npmGitHub Packages
打包方式一样一样
registry不同不同
publish不同不同

所以:

你不需要为“私有包”换工具


八、那 tsdown / rolldown 要不要“现在就用”?

我的真实建议(不站队)

  • ❌ 不要为了“未来”提前上

  • ❌ 不要在业务项目中试水

  • ✅ 可以用在:

    • 新开源库

    • side project

    • 技术探索仓库

等它们被 Vite / tsup 官方切换为默认底层,你再“被动升级”是最安全的。


九、给你一个“长期稳态方案”

🧠 你的最终工具组合应该是:

Next.js App     → Next 默认
Expo App → Expo / Metro
npm / gh 包 → tsup
Web UI 组件库 → Vite lib
未来升级 → tsdown(可选)

工具越少,项目越健康。


十、最后一句经验之谈

框架解决“交付”
库工具解决“复用”
不要让工具选择反客为主