所以不久前我删除了我的 react 本机应用程序中的/ios 目录(我们称之为 X)。我一直在使用 android 模拟器进行开发和测试,但现在我想确保它适用于带有 xcode 模拟器等的 ios。
所以我目前的想法是使用 ios 文件夹创建一个新的 react 本机裸项目(我们称之为 Y),然后按照以下步骤重命名 Y,使其具有 X 的名称,然后将/ios 目录从 Y 移动到 X 并尝试run-ios
。
我将在这里更新这是怎么回事,但我想知道是否有更好的方法,以前没有人遇到过这种情况吗?
我已经用谷歌搜索了很多东西"重新生成ios文件夹"删除ios文件夹"将ios文件夹添加到现有..",没有任何帮助。也许我的googlefu不够好,但如果有人有任何建议,非常感谢。
第 2 步将确保它由于依赖项和其他东西而编译,但现在我的目标是将/ios 文件夹放回项目中,并让 React Native 知道它的存在(它具有所有必要的配置)。
谢谢
您需要遵循的过程与重命名 react 本机应用程序非常相似。 基本上,您只需要在根项目目录中运行react-native upgrade
。有关更多信息,您可以在此处查看另一个问题。下面的说明说明了如何基于具有新名称的复制项目创建另一个 react 本机项目。
- 首先复制要更改名称的应用程序所在的目录。然后转到新克隆的目录。
- 更改作为参数提供给 AppRegistry
index.ios/android.js
文件中的名称。 - 在
package.json
上相应地更改名称和版本 - 删除旧应用中剩余的
/ios
和/android
文件夹。 - 运行
$react-native upgrade
以再次生成/ios
和/android
文件夹。 - 为任何本机依赖项运行
$react-native link
。 - 最后运行
$react-native run-ios
或任何你想要的东西。
只需删除/删除安卓和ios(保留备份安卓和ios文件夹)并运行以下命令:
react-native eject
Supported version :
react-native <= 0.59.10
react-native-cli <= 1.3.0
react-native upgrade --legacy true
Supported version :
react-native >= 0.60.0
react-native-cli >= 2.1.0
参考 : 链接
已编辑(2021年3月)
npm i react-native-eject
npm i @react-native-community/cli
react-native eject
将生成安卓和iOS文件夹。
参考:链接
注意 从 react-native 0.60.x 开始,您可以使用以下内容来重新生成 iOS/Android 目录:
react-native upgrade --legacy true
信用在这里: https://github.com/facebook/react-native/issues/25526
工作步骤 2021。
- 删除
/ios
/android
- 在
/app.json
和package.json
中将应用名称更改为新名称 npx react-native upgrade
运行 - 即使未生成平台文件,这一点也很重要。- 创建一个单独的目录并在那里运行
npx react-native init NewProjectName
。 - 将ios和android文件夹从生成的项目复制到旧项目
- 在旧项目中
/ios
运行pod install
- 运行
cd .. && npx react-native run-ios
正如注释中@Alok提到的,您可以执行react-native eject
来生成ios
和android
文件夹。但是您首先需要在项目中app.json
。
{"name": "example", "displayName": "Example"}
似乎react-native eject
不再可用。我能找到的重新创建ios文件夹的唯一方法是从头开始生成它。
备份您的ios文件夹
mv /path_to_your_old_project/ios /path_to_your_backup_dir/ios_backup
导航到临时目录并创建一个与当前项目同名的新项目
react-native init project_name
mv project_name/ios /path_to_your_old_project/ios
在项目的 ios 文件夹中安装 pod 依赖项
cd /path_to_your_old_project/ios
pod install
❯react-native eject
错误 无法识别的命令"弹出"。 信息 运行"反应本机 --帮助" 到 查看所有可用命令的列表。
❯react-native upgrade --legacy true
错误:未知选项"--旧版">
您可以在另一个文件夹中初始化一个名称相同的新项目,并将ios dir复制过来:
在"您的项目名称"目录中
npx react-native init YourProjectName
mv YourProjectName/ios ios
rm -rf YourProjectName
在这样做之前,请确保您有干净的 git 历史记录,以防您需要还原
- 打开终端/cmd
- 移动到项目"项目名称">文件夹所在的文件夹/目录(不要进入项目目录)
- 运行命令为:反应本机初始化"项目名称">,它将警告项目目录已经存在,但你继续。
- 它将在项目中安装所有更新的节点模块以及缺少的平台(android/ios)文件夹,而不会干扰已经编写的代码。 cd
- "ProjectName">,然后cd ios,然后运行pod install
PS:备份您的代码以防更改应用程序.js
为时已晚,但对于仍然遇到相同问题并拥有分离的 react 本机应用程序的任何人来说,我为我所做的只是在我的分离应用程序上运行 exp detach,它创建了 ios 文件夹!
由于 react-native 弹出在 60.3 中已弃用,并且我在尝试将表单 60.1 升级到 60.3 时遇到差异错误,因此重新生成 android 文件夹不起作用。
我不得不
rm -R node_modules
然后将 package.json 中的 react-native 更新到 59.1(删除 package-lock.json)
跑
npm install
react-native eject
这将重新生成您的安卓和ios文件夹 最后升级回 60.3
react-native upgrade
React-本机升级,而返回和 59.1 没有重新生成我的 android 文件夹,因此必须弹出。
如果您因找不到模块之类的错误而迷路,如果您使用了反应本机 CLI,除了以下方法之外别无他法.由于从.xcodeproj文件而不是.xcworkspace 打开 xcode项目,我遇到了类似的问题。 另请注意,反应原生弹出仅适用于世博会项目。
在 react 本机项目中重新生成 ios 和 android 文件夹的唯一解决方法如下。
- 使用命令react-native init生成具有相同名称的项目
- 将您的旧项目 ios 和安卓目录备份到备份位置
- 然后将ios和android目录从新创建的项目中复制到旧的不起作用的项目中
- 在复制的 ios 目录中运行pod 安装
现在你的问题应该解决了
我刚刚发现自己也遇到了这个问题,但我刚刚解决了它。
当然,在运行"反应本机升级"命令时,它给了他们一条消息,即无需更新或使用命令"反应本机弹出"表示无法识别该命令。
react-native upgrade
现在,您应该使用react-native upgrade --legacy true
命令备份Android文件夹或ios,因为此命令将替换您的文件。
react-native upgrade --legacy true
现在它只是告诉你不要替换你的包.json
我在 React Native .63 版本中遇到了同样的问题。我尝试了所有方法,但没有奏效。所以,我尝试像这样删除旧项目树中的android/ios文件夹,并在另一个文件夹中启动了一个名称相似的新项目,后来将android/ios文件夹从新项目复制到旧项目并使用react-native start --reset-cache重置缓存并运行react-native run-android,我的尝试成功了。
更新 2020。React Native 0.63.3 不再支持此命令react-native eject
。还react-native upgrade
负责 -使用rn-diff-purge
项目将应用的模板文件升级到指定或最新的 npm 版本。
可以通过此命令找到可用选项react-native --help
截至 2021 年 8 月底和react@17.0.2
/react-native@0.65.1
提出的解决方案都不适合我。expo-cli
无法使用现代react-native
降级package.json
并将所有依赖项弄乱到我既不能使用react-native run-android
也不能使用expo run:android
的状态。
我已经在 GitHub 项目上报告了这个问题。请随时评论和支持该领域的一些合理解决方案:
https://github.com/facebook/react-native/issues/32109
1.删除/ios /android
2.斜纹文件app.json
并添加代码:
{"name": "example", "displayName": "Example"}
3.运行npx react-native eject
4.运行npx react-native run-android
就我而言,我根本没有android文件夹,我使用expo init来创建我的反应原生项目
并生成Android Folder
运行此命令expo prebuild
- npm i react-native-eject
- NPX 反应原生弹出
(可选:运行 iOS 应用程序)
- cd iOS && Pod install
- NPX React-native run-iOS