React Native Link和CocoaPods之间的区别是什么?

6
2个回答

8

Cocoapods是iOS的依赖管理器。就像npm是JavaScript(更具体地说是Node.js)项目的依赖管理器。

让我们使用react-native-device-info来举例。

该项目要求您在Podfile中创建或添加以下内容(如果手动链接)。

pod 'RNDeviceInfo', :path => '../node_modules/react-native-device-info'

这将把RNDeviceInfo添加为iOS的依赖项,并查找'../node_modules/react-native-device-info'中的内容。更具体地说,它将寻找.podspec文件。
如果您查看.podspec文件,会看到类似于s.source_files = "RNDeviceInfo/*.{h,m}"的内容。该文件将抓取匹配的源代码(RNDeviceInfo.hRNDeviceInfo.m)并将它们存储在RNDeviceInfo目录中。我猜测(纯属猜测),目录名称与s.name相匹配。 react-native link ... 实际上也会自动完成相同的操作。引用自React文档:
“链接本机依赖项:react-native link 完成!所有具有本机依赖项的库都应已成功链接到您的iOS / Android项目中。”
两者都实现了相同的结果,使用react-native link将自动化本机库的链接。

如果您手动链接一个包,是否还需要通过Cocoapods安装它? - monchisan
2
不一定要使用 @GabrielMoncea - 你可以手动链接它,或者(如果库允许)通过Cocoapods安装它。永远不要两者都做。 - Dan
谢谢!Cocoapods FTW - monchisan
1
@Dan 当我执行 react-native link $package-name 命令时,它也会在我的 pod 文件中添加一个引用。这样做正确吗?好像我既通过 CocoaPods 安装了依赖,又通过 react-native link / node modules 安装了一遍? - Karl Taylor

1

就像这个答案所说的那样,react-native link会自动在cocoapodsPodfile中为你添加依赖项,如果你的ios项目使用了cocoapods

但是,在react-native v0.50.0之前不是这样的。它直接将依赖项的信息(文件引用头文件搜索路径)写入到你的项目的xcodeproj中。你仍然可以在react-native v0.57中看到旧代码。

那么,为什么要使用cocoapods呢?

我猜这是为了一致的包管理。如果没有cocoapods,如果你的依赖项A依赖于iOS社区中的另一个流行模块B,A的作者需要编写一些脚本,比如install-B.sh来下载B的文件,甚至更糟糕的是直接将B添加到A项目中。

例如,请参考react-native v0.48中的ios-install-third-party.sh

此外,您的iOS开发同事希望使用cocoapods(而不是xcodeproj)。对于javascript开发人员和iOS开发人员来说,使用相同的包管理器非常重要。这样可以确保您了解项目包含的所有本机模块。

cocoapodsreact-native link可以让我们充分利用这两个社区。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接