用途:把 TypeScript 库项目从 tsup 迁移到 tsdown(Rolldown 驱动的库打包器),供 AI 智能体在迁移、排查配置问题或解答兼容性疑问时使用。
运行要求:tsdown 仅构建时要求 Node.js ^22.18.0 || ^24.11.0 || >=26.0.0,不支持 Node.js 23、25 等奇数或 EOL 版本;产物可通过 target 选项面向更低 Node.js 版本,例如 target 设为 'node18' 或 'node20' 并在低版本 Node.js 上测试产物。
两阶段迁移:tsdown v0.23 移除了 bundle、outExtension、publicDir、removeNodeProtocol、injectStyle、skipNodeModulesBundle 等已弃用兼容选项,这些选项在 v0.23+ 类型检查失败且运行时被静默忽略,直接迁移不安全。tsdown v0.22.14 是最后仍接受这些选项并给出弃用警告的版本。阶段一在 tsdown@0.22.14 上安装、按映射表改配置、构建并消除全部弃用警告(零警告才算完成);阶段二再升级到 ^0.23.0 或更新版本并再次验证构建。
主要能力:配置文件重命名(tsup.config.* → tsdown.config.*)、导入与标识符替换(tsup → tsdown、TSUP → TSDOWN)、选项重命名(entryPoints→entry、cjsInterop→cjsDefault、esbuildPlugins→plugins、outExtension→outExtensions、publicDir→copy、bundle:true 删除、bundle:false→unbundle:true、removeNodeProtocol:true→nodeProtocol:'strip'、injectStyle:true→css:{inject:true}、skipNodeModulesBundle→deps:{neverBundle:true})、external/noExternal 迁入 deps.neverBundle / deps.alwaysBundle、unplugin 导入从 /esbuild 改为 /rolldown、package.json 脚本与依赖重命名、根级 tsup 配置字段改名。
默认值差异:format 由 'cjs' 变 'esm'、clean 由 false 变 true、dts 在 package.json 存在 types/typings 时自动启用、target 自动读取 engines.node;迁移时需显式设置以保留 tsup 行为,之后再决定是否采用新默认值。
限制与不支持项:splitting 始终开启无法关闭;metafile 不可用(可考虑 devtools:true);swc 不支持(内置 oxc);experimentalDts 改用 dts;legacyOutput 无替代;tsup 实验性 plugins 不兼容,需手动迁移为 Rolldown 插件。IIFE 产物名为 [name].iife.js,可用 outputOptions.entryFileNames 保留旧 .global.js 命名。仅 external 与 noExternal 在 v0.23 仍被接受但会告警,且不能与其替代项混用。