You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

发布NPM包时打包外部类型的行业标准实现方案咨询

针对两种类型打包场景的标准实现方案

核心思路

本质是借助TypeScript自身的类型编译能力,将依赖的类型递归提取并合并到最终的声明文件中,既避免强制用户安装冗余依赖,也解决浅层类型打包的不足。

场景A:Monorepo内部类型复用(后端→客户端)

  • 给后端项目的tsconfig.json开启declaration: true和declarationMap: true,编译后生成完整的类型声明文件和映射文件。
  • 在客户端项目的tsconfig.json里,通过compilerOptions.paths配置后端项目的源码路径,直接引用后端类型而非编译后的包。
  • 使用rollup-plugin-dts作为打包工具,配置示例:
    // rollup.config.js
    import dts from 'rollup-plugin-dts';
    
    export default {
      input: 'src/index.ts',
      output: [{ file: 'dist/index.d.ts', format: 'es' }],
      plugins: [dts({ respectExternal: false })],
    };
    
    其中respectExternal: false会强制把所有依赖的内部类型(包括后端的)都打包进最终的声明文件,无需将后端标记为发布依赖。

场景B:仅依赖外部包类型,无需安装源码

  • 把对应包的类型包(比如@types/xxx,若原包是TypeScript编写则直接用其自带类型)安装为devDependencies,仅用于编译阶段。
  • 同样用rollup-plugin-dts,开启respectExternal: false,打包时会自动递归提取用到的类型,最终生成的声明文件不再依赖外部类型包。
  • 编译完成后,可选择移除该类型依赖(或保留,不影响用户端),用户安装你的包时无需额外安装原大型包。

替代方案

如果不想使用rollup,也可以通过api-extractor的进阶配置实现:

  • 开启api-extractor配置中的rollupDeps: true选项,它会递归处理依赖的类型,打包生成完整的声明文件。
  • 需确保api-extractor能识别内部依赖路径,通过tsconfig.json的paths配置让它找到对应类型文件。

内容的提问来源于stack exchange,提问作者jjh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 09:25:02