升级react-native项目的最佳方式

Sin*_*pcs 2 react-native react-native-ios

我有一个关于升级react-native版本的问题。我们有一些升级选择,但我不知道有什么区别。

1)react-native upgrade

2)react-native-git-upgrade

3)npm install react-native@latest --save然后react-native run-androidreact-native run-ios

我在我的项目中使用了第三种方法,因为我需要在 android 文件夹中维护我的文件,如 MainActivity.java、MainApplication.java、AndroidManifest 等。

您能描述一下这些方式之间的差异吗?

lan*_*lan 5

长话短说

首先,您应该查看Facebook升级的最新选项。

如果这些都不适合您:

  • 在 package.json 中增加react-native的版本
  • run npm install(或者yarn,如果你使用的话)
  • 运行react-native upgrade或可能react-native upgrade --legacy

解释

在这里,我将解决您询问的每个升级选项。

1)npm install react-native@latest --save然后react-native run-android or react-native run-ios

您可能知道,run-*此处的命令不执行任何类型的升级。

同时,npm install --save <library>@<version>只是将库放入 package.json 或更新现有库的版本的命令。这是升级 package.json 中任何典型库的版本的方法。如果这就是升级 RN 的全部内容,那么社区中就不会因为升级的难度而大惊小怪了。还有很多工作要做。

如果这是升级时采取的唯一步骤,新版本的react-native将下载到node_modules,但它应该失败并抱怨很多事情:

  • react依赖也需要升级
  • ios您的和目录下的文件android将不会处于最新期望的状态react-native。例如,如果您从react-native 0.52升级到0.59,您将拥有gradle 2,而您的react-native库需要gradle 4。
  • 您的其他依赖项可能不适用于较新版本的 RN。npm install例如,这是我升级后的警告:

npm WARN react-native-markdown-renderer@3.2.8 requires a peer of react-native@^0.50.4 but none is installed. You must install peer dependencies yourself.

正如您所看到的,我还需要升级 native-markdown-renderer,因为它需要 RN 0.50,但我已经升级到 0.59。有些库可能会在这种不匹配的状态下工作,但这是您需要承担的风险。

2)react-native-git-upgrade

据我了解,RN团队对该产品存在太多问题,不再希望我们使用它。我猜这就是为什么它对我们大多数人来说根本不起作用的原因。

3)react-native upgrade

这将更新 package.json 中的 react-native 版本,同时还会ios在修改和目录中的文件时为您提供一组引导式 CLI 提示android。但是本指南将如何处理新传入文件与现有文件之间的冲突?您可能想保留一些更改。

据说较新版本react-native upgrade允许您执行差异和合并,但我还没有看到。当我运行它时,它打算用新文件破坏我的整个旧文件,并且它向我显示了本地文件系统上到“新”版本的路径,该版本将覆盖我的旧文件。因此,我使用自己的比较工具来比较新传入的文件和现有文件。如果您缺少 diff 工具,我使用p4Merge。因此,当您浏览 CLI 指南时,只需在现有文件和它为您提供的新文件的路径之间进行比较,然后一一执行此操作,向文件中添加必要的新行。如果您进行了一些更改,请对提示回答“否”,以便保留旧文件(包含您刚刚所做的修改)。如果文件中没有任何值得保留的内容,请回答“是”,然后让指南简单地覆盖并破坏您的旧文件。

该命令完成后,您的iosandroid目录将被更新。例如,gradle将从Gradle 2升级到Gradle 4。

您可能会遇到我遇到的错误,这会导致此命令不断将您升级到旧版本而不是最新版本。在这种情况下,您需要运行:react-native upgrade --legacy