为啥我们不在 react-native 中 gitignore ios/ 和 android/

Posted

技术标签:

【中文标题】为啥我们不在 react-native 中 gitignore ios/ 和 android/【英文标题】:Why don't we gitignore ios/ and android/ in react-native为什么我们不在 react-native 中 gitignore ios/ 和 android/ 【发布时间】:2018-01-25 17:09:57 【问题描述】:

在我们的 react-native 项目中,我们经常在截然不同的分支之间切换时使用以下脚本以避免复杂化。

"eject": "rm -rf ios/ && rm -rf android && react-native eject",
"fresh-start": "rm -rf ./node_modules && npm install && npm run eject"

但是,如果react-native eject 命令更改了 ios/build/ 和 android/ 中的许多生成文件,我们为什么不 gitignore ios/ 和 android/ 呢?在许多 github 问题和存储库中,我看到人们充其量是 gitignore 他们的构建/

【问题讨论】:

【参考方案1】:

iosandroid 文件夹将包含运行 RN 应用程序所需的本机代码。如果这些文件夹被忽略,您将不得不重新生成整个项目并每次运行 react native 链接。

此外,您可能需要运行自定义本机代码,这些代码将存储在本机文件夹中。

【讨论】:

弹出时保存本机代码的正确方法是什么? 本机代码将提交给 git,因此您不能忽略整个本机文件夹。例如,如果你有一个自定义的 Android RN 模块,你可以把它放在 root/android/app/src/main/java/com/company/app/MyCustomModule.java ios/build 文件夹呢?我们是 .gitignore 它还是提交它?【参考方案2】:

有两种方法可以启动 React-Native 项目。 create-react-native-appreact-native init

在第一种情况下,您将避免使用 ios/android 文件夹结构并依赖 Expo 来为您的项目提供服务。这也使您能够将react-native eject 转换为类似于react-native init 的结构

如果您不需要本机功能,则可以避免使用react-native eject。 You can read more about it here

如果您需要集成本机模块(Obj-c、Swift 或 Java)的能力,那么您需要那些 iOS / Android 文件夹并且您必须弹出。在 iOS / Android 文件夹中有与在 Xcode 或 Android Studio 中构建应用程序相关的信息。例如,iOS/Podfile 中可能有需要跟踪的模块才能正确构建 iOS 应用程序。弹射不是您必须不断进行的事情。

如果您不使用 Expo 来分发项目的 JS 端,那么您将需要另一个服务来执行此操作。 Microsoft App Center has support for React Native

【讨论】:

以上是关于为啥我们不在 react-native 中 gitignore ios/ 和 android/的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们不在“.cpp.h”文件中编译模板实现?

为啥 git 标签没有出现在任何分支上?

为啥我们使用 hadoop mapreduce 进行数据处理?为啥不在本地机器上做呢?

为啥视图不显示在 react-native 中?

为啥我们可以直接在ByteBuffer中分配字节而不在FloatBuffer中分配浮点数

React-Native with Redux:API 对象出现在我的 console.log 中,但不在我的视图中