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
相关产品推荐
相关产品推荐

