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

使用Expo构建React Native应用时Lerna依赖管理问题求助

解决Lerna + React Native/Expo项目的依赖hoisting问题

听起来你踩了Lerna默认依赖提升机制的坑——React Native和Expo的不少脚本、工具依赖得在子包的node_modules里才能被正确识别,可Lerna把它们全提到根目录了,导致mobile包找不到运行脚本对吧?我之前用Lerna管理多包React Native项目时也遇到过一模一样的问题,给你几个靠谱的解决办法:

1. 配置Lerna的nohoist规则

在项目根目录的lerna.json里,添加nohoist数组,指定哪些依赖不需要被提升到根目录,而是保留在子包自己的node_modules中。针对React Native和Expo,你可以这么配置:

{
  "packages": ["packages/*"],
  "version": "independent",
  "npmClient": "yarn",
  "useWorkspaces": true,
  "nohoist": [
    "**/react-native",
    "**/react-native/**",
    "**/expo",
    "**/expo/**",
    "**/@react-native-community/**",
    "**/@expo/**"
  ]
}

这样Lerna就会把这些核心依赖留在你的mobile包的node_modules里,确保运行脚本能被正常找到。

2. 同步Yarn Workspace的nohoist配置

因为你用Yarn做包管理,得在根目录的package.json里同步Yarn的nohoist规则,避免Yarn自身的hoisting覆盖Lerna的设置:

{
  "private": true,
  "workspaces": {
    "packages": ["packages/*"],
    "nohoist": [
      "**/react-native",
      "**/react-native/**",
      "**/expo",
      "**/expo/**",
      "**/@react-native-community/**",
      "**/@expo/**"
    ]
  }
}

3. 清理并重新安装依赖

配置好之后,先清理现有依赖文件确保新配置生效:

  • 删除根目录和mobile包下的node_modules文件夹
  • 删除根目录的yarn.lock文件(如果存在)
  • 重新执行yarn install

4. 用根目录Yarn运行子包脚本

如果还是碰到找不到脚本的情况,你可以通过根目录的Yarn来调用mobile包的脚本,比如:

yarn workspace mobile start

这种方式下Yarn会自动处理子包的依赖路径,不需要依赖子包node_modules里的脚本入口。

额外小贴士

像expo-cli这类工具型依赖可以安装在根目录作为开发依赖,让所有子包共用;但expo、react-native这类核心依赖必须通过nohoist配置留在子包里,不然会出现Native模块找不到的问题。

内容的提问来源于stack exchange,提问作者ngoc chau nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:14:15