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

时间:2017-10-17 06:49:40

标签: react-native react-native-android 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等。

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

4 个答案:

答案 0 :(得分:1)

如果它是一个较小的项目,只需使用'npx react-native init yourprojectname --version X.XX.Xt'创建一个新的react native项目,然后将旧项目的源文件夹复制到新项目中。然后尝试使用“ npx react-native run-android”或“ npx react-native run-ios”在android或ios中运行它。如果有任何运行时错误但没有构建错误,请相应地更新npm软件包。注意:这适用于小型项目,因为大型项目可能包含许多第三方依赖。 :)

答案 1 :(得分:0)

我尝试了react-native-git-upgrade,然后删除了node_modules,然后删除了npm install 它对我有用!

https://facebook.github.io/react-native/docs/upgrading

答案 2 :(得分:0)

TL; DR

首先,您应该从Facebook中检出latest options for upgrading

如果这些都不适合您:

  • 增加本机的版本package.json
  • 运行npm install(如果正在使用,则运行纱线)
  • 运行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依赖关系也需要升级
  • 您的iosandroid目录下的文件不会处于最新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的版本,但随后带您通过一组引导的CLI提示符,因为它会修改ios中的文件,并android个目录。但是,本指南将如何处理新的传入文件与现有文件之间的冲突?您可能要在其中进行一些更改。

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

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

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

答案 3 :(得分:0)

其他答案中提到的升级方法在很多情况下都可以使用,但是我遇到了很多错误太多的其他情况。

根据我的经验,在这些情况下,最好的方法是在新版本中创建一个新项目,并将源文件复制到新项目中。