You need to enable JavaScript to run this app. Yarn Monorepo配置nohoist后React Native无法解析react模块如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Yarn Monorepo配置nohoist后React Native无法解析react模块如何解决?

问题解决步骤

1. 调整nohoist规则范围

你之前的全局nohoist规则匹配了所有子包的react、react-dom依赖,导致根目录node_modules不会存在公共的react版本,RN侧的原生社区依赖向上查找react时就会找不到。
把根目录package.json的nohoist配置修改为仅对NextJS子包生效,假设你的NextJS子包在workspace中声明的名称是next-app(对应子包package.json的name字段),修改后配置如下:

"nohoist": [
  "next-app/react", 
  "next-app/react/**",
  "next-app/react-dom", 
  "next-app/react-dom/**"
]

这个配置只会让NextJS子包的react、react-dom不被提升到根目录,RN、NestJS子包的依赖仍然会正常提升到根目录,解决RN侧找不到react的问题。

2. 清理缓存重装依赖

修改配置后执行以下操作清理历史缓存:

  • 删除根目录、所有子包目录下的node_modules文件夹,以及根目录的yarn.lock文件
  • 执行yarn install重新安装所有依赖
  • 启动RN项目时加上重置缓存参数:yarn start --reset-cache

3. 可选:补充Metro解析配置

如果执行完前两步RN仍然报依赖找不到的错误,修改RN子包的metro.config.js配置,显式把根目录node_modules加入解析路径:

const { getDefaultConfig } = require('expo/metro-config');
const path = require('path');

const config = getDefaultConfig(__dirname);
// 按你的实际目录结构调整根node_modules的相对路径
config.resolver.nodeModulesPaths = [
  path.resolve(__dirname, 'node_modules'),
  path.resolve(__dirname, '../node_modules')
];

module.exports = config;

同时确认RN子包的package.json中已经明确声明了react、react-native的对应依赖版本,不要缺漏。


内容的提问来源于stack exchange,提问作者Niccolò Caselli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 10:45:04