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

Rollup构建React库时重新导出依赖的interfaces、enums等内容无法访问问题求助

跨库重新导出内容无法访问的解决方案

你的问题核心是运行时的enum值没有被正确包含在library-B的构建产物中,或者构建产物的依赖引用路径错误,类型丢失则是因为类型声明文件生成逻辑有问题,按以下步骤调整即可:

第一步:修复上游公共库library-A配置

  • 确认library-A的package.json配置完整,包含三个必填字段,指向对应构建产物:
    {
      "main": "./dist/index.cjs.js", // cjs格式入口
      "module": "./dist/index.esm.js", // esm格式入口
      "types": "./dist/index.d.ts" // 类型声明入口
    }
    
  • 检查library-A的tsconfig配置,确保开启了类型生成和enum保留规则:
    {
      "compilerOptions": {
        "declaration": true, // 生成d.ts类型文件
        "declarationMap": true, // 生成类型映射
        "preserveConstEnums": true // 避免const enum编译后被抹除
      }
    }
    
  • 确认library-A入口文件已正确导出所有需要对外暴露的interface、enum、常量,无遗漏。

第二步:调整组件库library-B的依赖与构建配置

  • 首先明确依赖规则二选一:
    • 方案1(推荐,无需主项目额外安装依赖):将library-A放在library-B的dependencies依赖项中,Rollup构建时会自动把library-A的导出内容打包进library-B的产物
    • 方案2(版本共享):将library-A放在library-B的peerDependencies中,同时在devDependencies中加入library-A用于本地开发,该方案要求主项目必须自行安装library-A才能正常使用
  • 调整Rollup配置逻辑:
    你当前使用的peerDepsExternal()插件只会将peerDependencies中的包标记为外置不打包,如果选择上面的方案1,不需要额外修改Rollup配置;如果选择方案2,要确保主项目安装library-B时同步安装对应版本的library-A
  • 检查library-B的tsconfig-rollup.json配置,同样开启declaration: true,确保rollup-plugin-typescript2可以正确生成包含重新导出内容的类型声明文件
  • 你当前的重新导出写法无需修改:运行时的enum用普通export导出,纯类型的interface用export type导出符合TypeScript规范。

第三步:构建产物验证

library-B构建完成后,检查dist目录下的产物:

  • 打开cjs/esm格式的js产物,搜索GENDER关键字,确认要么包含对应的enum编译后代码(方案1),要么有正确的require('library-A')/import from 'library-A'引用语句(方案2)
  • 打开d.ts类型声明文件,确认包含export declare enum GENDER以及对应的interface导出内容,没有丢失。

第四步:主项目验证

重新安装调整后的library-B,如果选择peer依赖方案,要在主项目手动安装library-A,之后即可正常访问重新导出的所有内容:

import { GENDER } from "library-B" 
console.log(GENDER.male) // 可正常访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:09:03