react-native链接和cocoapods之间的区别?

时间:2017-07-25 07:45:52

标签: react-native cocoapods

react-native link做了什么?

https://github.com/react-native-community/react-native-svg doc说要做

react-native link react-native-svg

相同
pod 'RNSVG', :path => '../node_modules/react-native-svg'  
# pod install 

2 个答案:

答案 0 :(得分:7)

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 docs:

  

链接您的原生依赖项: react-native link     完成!所有具有本机依赖关系的库都应该成功链接到您的iOS / Android项目。

两者都可以实现相同的结果,使用react-native link将自动链接本机库。

答案 1 :(得分:1)

就像this answer所说的那样,react-native link会自动在cocoapods Podfile中为您添加依赖项,如果您的ios项目使用了cocoapods

但是react-native v0.50.0之前不是这样。它将依赖项的信息(file referenceheader search pathlibrary)直接写到项目的xcodeproj中。您仍然可以在react-native v0.57中看到旧代码。

那么,为什么要使用cocoapods

我想这是用于一致的软件包管理。如果没有cocoapods,如果您的依赖项A依赖于iOS社区中另一个流行的模块B,则A的作者将需要编写诸如install-B.sh之类的脚本来下载B的文件,甚至更糟糕的是添加B直接进入A项目。

例如,请参见ios-install-third-party.sh in react-native v0.48

此外,您的iOS开发同事希望使用cocoapods(而不是xcodeproj)。 对JavaScript开发人员和iOS开发人员使用相同的包管理器很重要。双方都知道项目中包括的所有本机模块。

react-native linkcocoapods可以让我们利用两个社区。