使用 Turborepo 和 Yarn 工作区的 React Native monorepo 中的 Pod 出现错误

Kha*_*ada 4 cocoapods react-native yarn-workspaces

以下是 Stack Overflow 问题描述和标题的建议,可帮助您使用 Turborepo 和 Yarn 工作区打开 React Native monorepo 的问题:

标题:使用 Turborepo 和 Yarn 工作区的 React Native monorepo 中的 Pod 出现错误

描述:

我正在尝试使用 Turborepo 和 Yarn Workspaces 为 React Native 项目设置 monorepo,但我遇到了 Pod 错误。错误信息是:

An error occurred while processing the post-install hook of the Podfile.
Run Code Online (Sandbox Code Playgroud)

没有这样的文件或目录@ rb_sysopen - ../node_modules/react-native/package.json

我尝试了各种方法来解决该问题,例如符号链接 node_module/react-native 目录,但到目前为止没有任何效果。我希望找到解决此问题的方法,或者更好地了解可能导致此问题的原因。

有其他人在 React Native monorepo 中使用 Turborepo 和 Yarn Workspaces 时遇到此错误吗?如果有,您是如何解决的?

Lau*_*uer 11

发生这种情况是因为你必须告诉 Cocoapods 在哪里可以找到 React Native 包。默认情况下,它会看起来在上面一个目录 (./..),这在使用纱线工作区重新组织代码库后是不正确的。

对此有两种解决方案。你可以选择任何一种方式。

  1. 更改yarn放置节点模块的位置
  2. 更改 CocoaPods 查找 node_modules 的位置

更改yarn放置节点模块的位置

noHoist这可以通过顶部包 json 中的选项来实现。

...
  "workspaces": {
    "packages": [
      "./apps/*",
      "./packages/*"
    ],
  "nohoist": [
      "**/react-native",
      "**/react-native/**"
    ]
  },
...
Run Code Online (Sandbox Code Playgroud)

(您需要删除node_modules文件夹和锁定文件才能生效)

现在,如果您重新安装节点模块,react-native 将像往常一样出现在您的应用程序项目目录中,并且 CocoaPods 将能够找到它

更改 CocoaPods 查找 node_modules 的位置

如果你像这样移动你的项目 app => apps/app 那么你必须在 Podfile 中更改 3 件事

  • 1/2:将“../../”添加到require_relative,应该位于 podfile 中的第 2 行和第 3 行
  • 3:添加react_native_path参数react_native_post_install
require_relative '../../../node_modules/react-native/scripts/react_native_pods'
require_relative '../../../node_modules/@react-native-community/cli-platform-ios/native_modules'

...

   react_native_post_install(
      installer,
      react_native_path = "../../../node_modules/react-native",
      :mac_catalyst_enabled => false
    )
Run Code Online (Sandbox Code Playgroud)