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

开发Cloudflare Worker工具包时,如何复用firebase-admin的类型定义且不引入生产依赖

开发Cloudflare Worker工具包时,如何复用firebase-admin的类型定义且不引入生产依赖

我之前也碰到过几乎一模一样的问题——想复用firebase-admin的类型但又不想让它成为生产依赖,毕竟Cloudflare Worker的内存限制太严苛了。你的思路用dev依赖装firebase-admin然后导出类型是完全正确的,但tsup默认生成的d.ts会保留对原模块的引用,这就导致使用你包的用户可能需要额外装firebase-admin才能拿到类型(虽然运行时不需要,但类型依赖还是甩不掉)。

下面给你两个可行的解决方案,都是我实际试过的:

方案一:用dts-bundle-generator把依赖类型内联到自己的d.ts里

这是最省心的自动化方案,能把firebase-admin的类型直接合并到你的包的类型文件中,不需要手动复制。

步骤:

  1. 先安装dts-bundle-generator作为dev依赖:
npm install --save-dev dts-bundle-generator
  1. 修改你的tsup配置,关闭自带的dts生成,然后在构建完成后用dts-bundle-generator生成合并后的类型文件:
import { defineConfig } from "tsup";
import { execSync } from "child_process";

export default defineConfig({
  entry: ["src/index.ts"],
  format: ["esm"],
  dts: false, // 关掉tsup自带的dts生成
  sourcemap: true,
  clean: true,
  target: "esnext",
  minify: false,
  onSuccess: () => {
    // 运行dts-bundle-generator,把所有依赖类型内联进来
    execSync(
      "dts-bundle-generator src/index.ts --out-file dist/index.d.ts --no-check --external-imports none"
    );
  },
});

这里的--external-imports none是关键,它会告诉工具不要保留任何外部类型的引用,直接把firebase-admin的类型定义复制到你的index.d.ts里。

  1. 最后在tsconfig.json里加上skipLibCheck: true,避免firebase-admin的类型依赖带来的检查错误:
{
  "compilerOptions": {
    "skipLibCheck": true,
    // 你的其他配置...
  }
}

运行tsup后,打开dist/index.d.ts看看,应该能看到DecodedIdToken、UserRecord这些类型的完整定义已经内联在里面了,再也没有对firebase-admin的引用。

方案二:手动复制firebase-admin的类型定义

如果不想加额外的工具依赖,也可以手动把需要的类型从firebase-admin的包中复制出来。

步骤:

  1. 找到node_modules/firebase-admin/auth/index.d.ts文件,里面包含了你需要的所有类型定义。
  2. 把DecodedIdToken、UserRecord等你用到的类型的完整定义复制到你的src/types.ts文件中,替换原来的导入和导出。
  3. 这样你的包就完全没有任何firebase-admin的类型引用了,类型定义都在本地。

这个方案的优点是完全自主,没有额外工具依赖,但缺点也很明显——如果firebase-admin更新了类型,你需要手动同步,比较繁琐,适合对依赖控制极其严格的场景。

最后验证

不管用哪个方案,都建议在一个测试项目中安装你的包,测试一下:

  1. 不需要安装firebase-admin就能正常导入你的类型。
  2. 编译测试项目时没有类型错误。
  3. 运行时完全不依赖firebase-admin(可以把firebase-admin从测试项目中删掉试试)。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 07:12:57