升级 react-native 项目的最佳方式
Best way to upgrade react-native project
我有一个关于升级 react-native 版本的问题。
我们有一些升级的选择,但我不知道有什么不同。
1) react-native upgrade
2) react-native-git-upgrade
3) npm install react-native@latest --save
然后 react-native run-android
或 react-native run-ios
我在我的项目中使用了第三种方式,因为我需要在 android 文件夹中维护我的文件,例如 MainActivity.java、MainApplication.java、AndroidManifest 等
能否请您描述一下这些方式之间的区别?
我尝试了 react-native-git-upgrade
然后删除了 node_modules
然后 npm install
它对我有用!
TL;DR
首先,您应该从 facebook 查看 latest options for upgrading。
如果其中 none 适合您:
- 增加你的 package.json
中的 react-native 版本
- 运行
npm install
(或者纱线,如果你正在使用的话)
- 运行
react-native upgrade
或者可能 react-native upgrade --legacy
说明
我在这里解决了您询问的每个升级选项。
1) npm install react-native@latest --save
then 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 版本,但随后 也会 带您完成一组引导式 CLI 提示,因为它修改了您的 ios
和 android
目录。但是本指南将如何处理新传入文件与现有文件之间的冲突?您可能希望保留其中的一些更改。
据说 react-native upgrade
的较新版本允许您执行差异和合并,但我还没有看到。当我 运行 它时,它打算用一个新文件破坏我的整个旧文件,它向我显示了我本地文件系统上指向 "new" 版本的路径,该版本将覆盖我的旧文件。所以我使用自己的差异工具来区分新传入文件和现有文件。如果你缺少 diff 工具,我使用 p4Merge。因此,当您阅读 CLI 指南时,只需在现有文件和它为您提供的新文件的路径之间进行比较,然后一个一个地执行此操作,向您的文件添加必要的新行。如果您进行了一些更改,请对提示回答 "no",以便您可以保留旧文件(包含刚刚所做的修改)。如果您没有任何值得保留在文件中的内容,请回答 "yes" 并让指南简单地覆盖和破坏您的旧文件。
此命令完成后,您的 ios
和 android
目录将被更新。例如,gradle 将从 Gradle 2 升级到 Gradle 4。
你可能会遇到我做的错误,这会导致此命令不断将你升级到旧版本而不是最新版本。在这种情况下,您需要改为 运行: react-native upgrade --legacy
其他答案中提到的升级方法在很多情况下确实有效,但我遇到过很多其他错误太多的情况。
根据我的经验,在这些情况下,最好的方法是在新版本中创建一个新项目,并将源文件复制到新项目中。
如果它是一个较小的项目,只需使用 'npx react-native init yourprojectname --version X.XX.Xt' 创建一个新的 React Native 项目,然后将旧项目的源文件夹复制到新项目中。然后使用 'npx react-native run-android' 或 'npx react-native run-ios' 在 android 或 ios 中尝试 运行。如果有任何运行时错误但没有构建错误,则相应地更新 npm 包。注意:这适用于小型项目,因为大型项目可能包含许多第 3 方依赖项。 :)
我有一个关于升级 react-native 版本的问题。 我们有一些升级的选择,但我不知道有什么不同。
1) react-native upgrade
2) react-native-git-upgrade
3) npm install react-native@latest --save
然后 react-native run-android
或 react-native run-ios
我在我的项目中使用了第三种方式,因为我需要在 android 文件夹中维护我的文件,例如 MainActivity.java、MainApplication.java、AndroidManifest 等
能否请您描述一下这些方式之间的区别?
我尝试了 react-native-git-upgrade
然后删除了 node_modules
然后 npm install
它对我有用!
TL;DR
首先,您应该从 facebook 查看 latest options for upgrading。
如果其中 none 适合您:
- 增加你的 package.json 中的 react-native 版本
- 运行
npm install
(或者纱线,如果你正在使用的话) - 运行
react-native upgrade
或者可能react-native upgrade --legacy
说明
我在这里解决了您询问的每个升级选项。
1)
npm install react-native@latest --save
thenreact-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 版本,但随后 也会 带您完成一组引导式 CLI 提示,因为它修改了您的 ios
和 android
目录。但是本指南将如何处理新传入文件与现有文件之间的冲突?您可能希望保留其中的一些更改。
据说 react-native upgrade
的较新版本允许您执行差异和合并,但我还没有看到。当我 运行 它时,它打算用一个新文件破坏我的整个旧文件,它向我显示了我本地文件系统上指向 "new" 版本的路径,该版本将覆盖我的旧文件。所以我使用自己的差异工具来区分新传入文件和现有文件。如果你缺少 diff 工具,我使用 p4Merge。因此,当您阅读 CLI 指南时,只需在现有文件和它为您提供的新文件的路径之间进行比较,然后一个一个地执行此操作,向您的文件添加必要的新行。如果您进行了一些更改,请对提示回答 "no",以便您可以保留旧文件(包含刚刚所做的修改)。如果您没有任何值得保留在文件中的内容,请回答 "yes" 并让指南简单地覆盖和破坏您的旧文件。
此命令完成后,您的 ios
和 android
目录将被更新。例如,gradle 将从 Gradle 2 升级到 Gradle 4。
你可能会遇到我做的错误,这会导致此命令不断将你升级到旧版本而不是最新版本。在这种情况下,您需要改为 运行: react-native upgrade --legacy
其他答案中提到的升级方法在很多情况下确实有效,但我遇到过很多其他错误太多的情况。
根据我的经验,在这些情况下,最好的方法是在新版本中创建一个新项目,并将源文件复制到新项目中。
如果它是一个较小的项目,只需使用 'npx react-native init yourprojectname --version X.XX.Xt' 创建一个新的 React Native 项目,然后将旧项目的源文件夹复制到新项目中。然后使用 'npx react-native run-android' 或 'npx react-native run-ios' 在 android 或 ios 中尝试 运行。如果有任何运行时错误但没有构建错误,则相应地更新 npm 包。注意:这适用于小型项目,因为大型项目可能包含许多第 3 方依赖项。 :)