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

如何排除Vite构建的React+Firebase库中的@firebase依赖?

问题描述

我正在开发一款基于React和Firebase的Hook+组件库,目前库已具备一定稳定性,核心目标是尽可能压缩打包体积。我编写了如下vite.config.ts配置:

import peerDepsExternal from "rollup-plugin-peer-deps-external";
import { defineConfig } from "vite";
import dts from "vite-plugin-dts";
import { peerDependencies } from "./package.json";

export default defineConfig({
  build: {
    lib: {
      entry: "./src/index.ts", // 指定库构建的入口文件
      name: "firereact", // 设置生成的库名称
      fileName: (format) => `index.${format}.js`, // 根据格式生成输出文件名
      formats: ["cjs", "es"], // 指定输出格式(CommonJS和ES模块)
    },
    rollupOptions: {
      external: [...Object.keys(peerDependencies)], // 定义Rollup打包的外部依赖
    },
    sourcemap: true, // 生成用于调试的源映射文件
    emptyOutDir: true, // 构建前清空输出目录
  },
  plugins: [dts(), peerDepsExternal()], // 使用vite-plugin-dts生成TypeScript声明文件(d.ts)
});

按预期,build.lib.rollupOptions.external会从package.json中读取peer依赖,peerDepsExternal插件用于避免打包peer依赖的嵌套依赖。但通过npx vite-bundle-visualizer分析后发现,@firebase相关代码被包含在最终库中,用less dist/index.es.js也能看到混淆后的@firebase痕迹。Firebase是我声明的peer依赖,理论上不应被打包进库,请问如何彻底将@firebase从打包产物中排除?

已尝试的排查方法
  • 在vite.config.ts的build.lib.rollupOptions.external中手动添加@firebase
  • 调整tsconfig.json中的相关设置

解决方法

1. 用正则匹配所有@firebase子包

Rollup的external选项默认只匹配精确包名,若代码中导入的是@firebase/app、@firebase/firestore这类子包,仅写@firebase无法覆盖所有相关依赖。需添加正则表达式匹配所有@firebase/*开头的包:

修改vite.config.ts中的rollupOptions.external部分:

rollupOptions: {
  external: [
    ...Object.keys(peerDependencies),
    /^@firebase\/.+$/ // 匹配所有@firebase子包
  ],
},

2. 确保peerDependencies声明准确

检查package.json,若代码直接使用@firebase子包,需在peerDependencies中明确列出:

"peerDependencies": {
  "react": "^18.0.0",
  "react-dom": "^18.0.0",
  "@firebase/app": "^10.0.0",
  "@firebase/firestore": "^10.0.0"
  // 其他你用到的@firebase子包
}

若依赖完整的firebase包,直接声明"firebase": "^10.0.0"即可。

3. 清理缓存后重新构建

执行以下命令清空缓存和旧产物,避免缓存导致配置不生效:

rm -rf dist node_modules/.vite
npm run build

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:29:57