将 react-native 升级到最新版本 0.61.4 后找不到以下原生模块

Posted

技术标签:

【中文标题】将 react-native 升级到最新版本 0.61.4 后找不到以下原生模块【英文标题】:Could not find the following native modules after upgrading the react-native to latest version 0.61.4 【发布时间】:2019-11-22 05:50:53 【问题描述】:

升级 react-native 版本后,我得到以下内容。并且无法在模拟器中运行构建

在这之后,我运行了 react-native run-ios 它显示我所有的包都是手动链接的,你需要取消链接所有的包。

另外,在更新到最新的 react-native 之后,任何人都可以澄清 react-native-config.js 文件是强制性的。

我总是打开 app.Xcodeproj,但下面显示我需要打开 app.xcworkspace。谁能澄清一下?

warn The following packages use deprecated "rnpm" config that will stop working from next release:
  - react-native-fetch-blob: https://github.com/wkh237/react-native-fetch-blob#readme
  - react-native-orientation: https://github.com/yamill/react-native-orientation#readme
  - rn-fetch-blob: https://github.com/joltup/rn-fetch-blob#readme
Please notify their maintainers about it. You can find more details at https://github.com/react-native-community/cli/blob/master/docs/configuration.md#migration-guide.
error Could not find the following native modules: BugsnagReactNative, react-native-camera, react-native-cookies, react-native-fast-image, react-native-fetch-blob, RNFS, RNGestureHandler, RNImageCropPicker, react-native-image-picker, RNImageRotate, BVLinearGradient, react-native-orientation, RNShare, RNSVG, RNVectorIcons, RNViewShot, react-native-webview, rn-fetch-blob. Did you forget to run "pod install" ?
info Found Xcode workspace "Fashion.xcworkspace"

【问题讨论】:

您是否尝试过取消所有链接并打开 xcworkspace? 我已取消链接所有软件包,但 3 个软件包未取消链接。警告以下软件包使用已弃用的“rnpm”配置,该配置将从下一个版本停止工作:- react-native-fetch-blob:github.com/wkh237/react-native-fetch-blob#readme - react-native-orientation:github.com/yamill/react-native-orientation#readme - rn-fetch-blob:github.com/joltup/rn-fetch-blob#readme请通知他们的维护人员。您可以在github.com/react-native-community/cli/blob/master/docs/… 找到更多详细信息。 哦,那你应该尽快删除 rnpm。如果您得到答案,请发布 我是否需要创建 react-native.config.js 文件是强制性的吗? @sejn,我已经更新了答案,你可以试试 【参考方案1】:

这应该可以解决您的问题。

rm -rf ios/Pods && rm -rf ios/build && cd ios && pod install && cd ../

rm -rf node_modules && rm yarn.lock && yarn install

PS:在 react-native 0.60 及更高版本中,本机模块现在是自动链接的。有关更多信息,请参阅文档:https://facebook.github.io/react-native/blog/2019/07/03/version-60#native-modules-are-now-autolinked

【讨论】:

这是否从 Podfile 中删除了所有现有的包? @sejn 好的。有什么更新?那有帮助吗?如果没有,你会得到什么错误?谢谢 从 podfile 中删除所有包。 rm -rf ios/Pods && rm -rf ios/build && cd ios && pod install 之后没有包 找不到以下原生模块:BugsnagReactNative、react-native-camera、react-native-orientation、RNShare、RNSVG、RNVectorIcons、RNViewShot、react-native-webview、rn-fetch-blob。您是否忘记运行“pod install” @sejn 我分享的代码有 pod install 。无论如何,请 cd 进入 ios 目录并运行 pod install【参考方案2】:

首先,当你更新 react-native 版本时,你应该使用 react-native 官方document。避免一些错误的事情。 react-native 更新 helper 中的更新细节。

对于您的问题,从 0.60 开始,CocoaPods 现在是 React Native 的 iOS 项目的一部分。如果您还没有,请务必从现在开始使用 xcworkspace 文件打开 iOS 平台代码。

同时,现在在大多数情况下不再需要 react-native 链接。 react-native 团队对链接过程进行了全面检查。确保 react-native 取消链接上述文档中提到的任何预先存在的依赖项。有关更多详细信息,您可以阅读此article。

对于 rnpm 问题,首先你应该在 package.json 中删除它。 然后在项目文件夹中创建一个 react-native.config.js 文件。

const ios = require('@react-native-community/cli-platform-ios');
const android = require('@react-native-community/cli-platform-android');

module.exports = 
    project: 
      ios: ,
      android: ,
    ,
    // assets: ['Resources/fonts'], // stays the same
    // commands: require('./path-to-commands.js'),
  ;

然后在 rn-fetch-blob(make 为例)中,您还创建 react-native.config.js 并根据其 rnpm config 进行修改

【讨论】:

所以更新到 0.60.4 后需要打开 xcworkspace 而不是 xcodeproj。我可以详细了解一下吗 如果我使用 xcodeproj 意味着我认为它不再有效?我需要在 xcworkspace 的任何地方进行任何更改吗? 我已经打开了xcworkspace。现在我得到 React/RCTBridgeModule.h' 文件未找到 你应该删除旧的链接库,使用 pod install 为 ios 自动链接库。 我已经删除了我的旧库,还从 ios 文件夹运行了 pod install。【参考方案3】:

在最新的 react-native 稳定版中,无需链接第三方库,安装即可正常使用

首先,

所以,当您从低版本迁移到高稳定版本时, 然后你需要做什么,只需取消链接你使用过的所有库 在您的项目中,react-native 会自动检测其 依赖关系。而且请记住,每当您安装此类 您不需要运行 react-native link <library-name> 的库 链接它。

其次,

现在您需要像在最新版本中一样使用 xcworkspace 文件, ios正在处理豆荚,当豆荚出现时,你 必须在你的 ios 项目中使用 xcworkspace 而不是 Xcodeproj

您可以查看更新日志here 以了解 React Native 0.61.4 版本。

我希望这会有所帮助....谢谢:)

【讨论】:

【参考方案4】:

我的解决方案是结合上面的一些技巧并更新我的 Pod 文件

    只需重置:

    rm -rf ios/Pods && rm -rf ios/build

    cd ios && pod install && cd ..

    rm -rf node_modules && rm yarn.lock && yarn install

原因是为了最大限度地提高未来的兼容性。

    这是一个 facebook 提供的模板,为您现有的旧 pod 文件挑选一些好东西:

    https://github.com/facebook/react-native/blob/0.63-stable/template/ios/Podfile

您可能会发现下面的代码是auto linking

require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'

您可能需要升级 ios 目标

platform :ios, '10.0'

你可以在没有use_frameworks! enabled的情况下使用Flipper

【讨论】:

【参考方案5】:

可能是您的 podfile 中有某些东西导致了这种情况。例如,我从我的项目中删除了一个库,但在 podfile 中仍然有对它的引用:

   pod 'react-native-onesignal', :path => '../node_modules/react-native-onesignal'

评论/删除此行后,pod install 效果很好。

【讨论】:

【参考方案6】:

对我来说,只是将 npm install 转换为 yarn install 是可行的,因为其他团队正在使用 yarn,而我试图使用 npm 安装包,所以它产生了一些冲突。 然后我重新克隆了项目 'yarn install', 'react-native link' 然后 'pod 安装'

【讨论】:

以上是关于将 react-native 升级到最新版本 0.61.4 后找不到以下原生模块的主要内容,如果未能解决你的问题,请参考以下文章

react-native 更新到最新版本[关闭]

如何将 Angular CLI 升级到最新版本

如何从 React ^0.14.8 & React-native ^0.24.1 升级到 React 15.0.2 和 React-native 0.26.3

如何在 react-native 0.57+ 上为 react-relay(经典)配置 babel

如何升级 react-native gradle 版本

如何将 docker-compose 升级到最新版本