为啥命令 `pod install` 或 `pod update pod_name` 会安装这么多文件?

Posted

技术标签:

【中文标题】为啥命令 `pod install` 或 `pod update pod_name` 会安装这么多文件?【英文标题】:Why does the command `pod install` or `pod update pod_name` install so many files?为什么命令 `pod install` 或 `pod update pod_name` 会安装这么多文件? 【发布时间】:2018-12-30 10:01:52 【问题描述】:

我在我的 react-native ios 项目中使用 firebase 动态链接。

Cocoapods version --- 1.5.3 xcode version --- 9.4.1

当我尝试使用 pod update Firebase/DynamicLinks 更新 pod Firebase/DynamicLinks 时,它不仅更新了该 pod,还更新了许多其他 pod,最重要的是它弃用了对 v0.11.0 的反应,当我执行 git status 时,我看到了添加/修改的文件超过1100个。

此外,构建失败并出现argument list too long 等错误。

我不明白为什么 cocoapods 总是发生这种情况。

我在将 segment-io 安装到我的 react native 项目时遇到了同样的问题,所以我不得不手动链接该项目。

但 firebase 动态链接不是 javascript 库,因此无需手动链接。

谁能指出解决方案?

【问题讨论】:

您检查我们的答案了吗? 【参考方案1】:

之所以如此,是因为 RN podspec 非常古老且没有维护 - Facebook 不使用 cocapods。

要修复它,请将其添加到您的目标(Podfile)。

pod 'DoubleConversion', :podspec => "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
pod 'Folly', :podspec => "../node_modules/react-native/third-party-podspecs/Folly.podspec"
pod 'glog', :podspec => "../node_modules/react-native/third-party-podspecs/GLog.podspec"
pod 'React', path: '../node_modules/react-native', subspecs: [
  'Core',
  'CxxBridge',
  'RCTAnimation',
  'RCTActionSheet',
  'RCTImage',
  'RCTLinkingIOS',
  'RCTNetwork',
  'RCTSettings',
  'RCTText',
  'RCTVibration',
  'RCTWebSocket',
  'RCTPushNotification',
  'RCTCameraRoll',
  'RCTSettings',
  'RCTBlob',
  'RCTGeolocation',
  'DevSupport'
]
pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'

这将告诉 cocoapods 使用来自 node_nodules 的 react native 和其他需要的库 - 版本在您的 package.json 中定义

Podfile 底部的那个脚本广告(在目标之后):

post_install do |installer_representation|
  installer_representation.pods_project.targets.each do |target|
      if target.name == "React"
          target.remove_from_project
      end
  end
end

有计划在未来改进:https://github.com/react-native-community/discussions-and-proposals/pull/18

【讨论】:

我将该代码与最新的 react 本机版本一起使用:0.57.8 不要忘记在更改后运行pod install(如果需要,还可以运行pod update【参考方案2】:

当我尝试更新 pod Firebase/DynamicLinks 时,使用 pod update Firebase/DynamicLinks,它不仅更新了该 pod,还更新了许多其他 ...

基本上,这是因为 Firebase/DynamicLinks 依赖 其他 repos (pod),这意味着为了更新 Firebase/DynamicLinks,它们的依赖关系也应该得到更新。

作为建议,您应该手动提及适合您项目的最新版本;在你的podfile:

pod `Firebase/DynamicLinks`, 'here is the specific proper version'

请注意,不提及 pod 使用的版本,它应该安装最新的,这可能不是适合您的情况。

【讨论】:

以上是关于为啥命令 `pod install` 或 `pod update pod_name` 会安装这么多文件?的主要内容,如果未能解决你的问题,请参考以下文章

pod install -bash: pod: 找不到命令

为啥 pod 即使成功运行也会返回 Error 或 ExitCode:0?

Pod install 未在 Flutter 应用程序中安装 Pod

pod update或者pod install很慢

如何查看pod install进度

在终端的 Podfile 上使用 Pod Install 命令时出错