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

使用react-native-builder-bob构建的自定义React Native工具包通过npm安装时出现TS组件错误,Yarn构建正常

react-native-builder-bob构建的自定义React Native工具包通过npm安装时出现TS组件错误,Yarn构建正常

看起来你遇到的问题是npm和yarn在依赖解析、peer依赖处理上的差异导致的,尤其是从GitHub安装包时,npm会执行prepare脚本但可能拉取了不兼容的类型依赖,引发TS错误。下面是几个针对性的解决方案,你可以一步步尝试:

1. 锁定Peer依赖版本,避免版本漂移

你的package.json里peerDependencies用了*,这会允许npm安装任何版本的react/react-native,很容易和你项目里的17.0.2/0.68.2版本不兼容,导致类型冲突。把peerDependencies改成和项目匹配的范围:

"peerDependencies": {
  "react": "^17.0.0",
  "react-native": "^0.68.0",
  "react-native-svg": "^13.0.0"
}

这样npm安装时会确保依赖版本和你的项目一致,避免类型不匹配。

2. 强制项目依赖的类型包版本(npm专属)

npm的依赖解析可能会拉取工具包依赖树里的高版本@types/react/@types/react-native,和你项目的版本冲突。你可以在项目的package.json里添加overrides字段,强制锁定这些类型包的版本:

"overrides": {
  "@types/react": "17.0.21",
  "@types/react-native": "0.68.0"
}

这个配置会让npm在安装所有依赖时,都使用指定的类型版本,解决跨包的类型冲突。

3. 检查react-native-builder-bob的构建配置

确保你的tsconfig.build.json配置正确,能生成完整的类型定义:

  • 确认compilerOptions里的declaration: true,并且declarationDir指向lib/typescript(和package.json里的types字段对应)
  • 确保tsconfig里的jsx设置为react-native,因为React Native的JSX语法和Web不同
  • 手动运行npm run build,检查lib/typescript目录下是否生成了正确的.d.ts文件,尤其是CloseButton相关的类型

4. 清理npm缓存,重新安装

有时候npm缓存的旧依赖会导致奇怪的问题,执行以下步骤:

  • 删除项目的node_modules目录和package-lock.json
  • 运行npm cache clean --force清除缓存
  • 重新执行npm install安装依赖

5. 确认GitHub安装时的构建流程

当从GitHub安装包时,npm会自动执行package.json里的prepare脚本(也就是bob build)。你可以在本地模拟这个流程:

  • 克隆你的工具包仓库到本地
  • 执行npm install然后npm run prepare
  • 检查生成的lib文件夹是否正常,没有类型错误
    如果构建后有错误,那说明是构建脚本的问题,需要调整bob的配置或者tsconfig

这类问题大多是依赖版本不匹配导致的类型冲突,锁定peer依赖和强制类型版本是最常见的解决方法。如果还是不行,可以考虑升级node版本(你的v14.21.2相对较旧,npm9和node14可能存在兼容性问题)。

备注:内容来源于stack exchange,提问作者menaka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 12:58:04