React Native 版本不匹配

React Native version mismatch

当我初始化一个新项目然后启动 Xcode 模拟器时收到以下消息:

React-Native Version Mismatch

Javascript Version 0.50.1 Native version: 0.50.0

Make sure you have rebuilt the native code. ...

有谁知道这里发生了什么并且可以帮助我吗?

我以前从未见过这个错误,但每当我无法让 Xcode 和 React-Native 很好地协同工作时,我都会做一些事情。检查我正在使用的 Xcode 版本。如果需要更新,我会更新它。然后清除守望者和缓存是我去的第二个地方。我不使用重置缓存命令。它总是说我需要验证缓存,所以我跳过它(不过你可以这样做,我只是感到困惑)。我使用 rm -rf $TMPDIR/react-* 来删除任何缓存的构建。如果这不起作用,我会尝试在 Xcode 中构建应用程序,然后从那里开始,使用 react-native 运行-ios 构建它。对于此错误消息,您似乎可以从尝试使用 Xcode 构建它开始。希望能有所帮助...让我知道您的进展情况。祝你好运! (另外,您可以更新到 RN 0.51 作为同步版本的另一种尝试。)

这是我用它完成的:

Close all terminals and run build again.

你可能忘记关闭来自另一个项目的nodejs终端,他们恰好安装了不同的react版本。

所以从nodejs服务器端抓取的代码和原生的有冲突

如果您运行通过 Expo 安装 React Native 应用程序,升级 React Native 可能会导致此错误(如 https://github.com/expo/expo/issues/923 所述)。

如果这是您的情况,您的选择是:

  1. 将 Expo(在您的 package.json 中列出)升级到与您的 React Native 版本兼容的版本(如果 存在,这可能不是案例 - 从链接的问题来看,我认为 Expo 支持落后于 React Native 版本)。
  2. 放弃您的更改,从 Expo Eject 删除并重新安装您的 Node 模块,然后(在检查您仍然可以 运行 您的应用程序 post-ejection 之后)尝试您的再次升级

对于使用 CocoaPods 在 iOS 上遇到相同问题的其他人:

我尝试了上面的所有解决方案,但没有成功。我的项目中有一些具有本机依赖项的包,并且正在安装其中一些需要的 pod 模块。问题是在我的 Podfile 中指定了 React,但是 React pod 没有通过使用 react-native-git-upgrade.

自动升级

解决方法是通过 运行 cd ios && pod install.

升级所有已安装的 pods

如果您使用 create-react-native-app 创建了您的 react-native 应用程序。你应该有一个 app.json (世博会)。和一个 package.json 文件,检查 expo 版本是否匹配并进行相应更改。例如,在我的例子中,问题是在 app.json 文件中,我有一个 25.0.0 版本的 expo sdkVersion 属性 ,我将其更改为 23.0.0 并且一切正常.

package.json:

"dependencies": {
    "expo": "^23.0.4",
    "react": "16.0.0",
    "react-native": "^0.50.4"
  }

app.json:

{
  "expo": {
    "sdkVersion": "23.0.0" // before was 25.0.0
  }
}

对于 Android 仅通过关闭和重建无法修复它的开发人员,请手动卸载 emulator/device 上的应用程序。

我们所做的修复是确保在构建之前设置 ANDROID_HOME 和 PATH 变量。

首先,运行 下面的两个命令然后为设备构建应用程序。

export ANDROID_HOME=/Users/username/MyFiles/applications/androidsdk
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools

我遇到这个问题的时间最长,none 上述解决方案有所帮助。我正在 create-react-native-app 项目中升级 React Native,直到我发现并非所有版本的 Expo 都支持最新的 React Native。

在文档中找到链接的页面,其中显示了官方支持的 React Native、React 和 Expo 的版本组合:

来源:https://github.com/react-community/create-react-native-app/blob/master/VERSIONS.md

编辑 app.jsonpackage.json 文件以匹配相应的版本,运行 npm install 使一切恢复正常。

我在使用 Expo 和 iOS 模拟器时也遇到了这个问题。对我有用的是在 Hardware > Erase All Content and Settings...

中擦除模拟器

这不是修复,但就我而言,我的设备上安装了多个 RN 应用程序,我在不知不觉中尝试从错误的应用程序中“重新加载”。 (我目前正在同时开发两个应用程序)因此请确保您在正确的应用程序中!

在您的 build.gradle 文件中添加以下内容

implementation ("com.facebook.react:react-native:0.51.0") {
    force = true;
}

0.51.0替换为您package.json

中的版本

只需在 android 的应用程序级别 gradle 文件中的 dependencies 部分强制响应本机版本。

compile ("com.facebook.react:react-native:0.52.0") { force = true }

对我有用

只需转到您的 android/app/build.gradle,然后添加到 dependencies 部分:

dependencies{
compile ("com.facebook.react:react-native:0.50.3") { force = true } 
}

/// React Native 版本可以在 package.json

中找到

尝试将 package.json 中指定的 react-native 版本(在 dependencies - react-native 下)更改为与错误消息中显示的 'Native Version' 相同的版本。然后再运行'npm install'

我在为 android 构建我的 React 本机应用程序时遇到了同样的问题,我做了以下对我有用的事情。

错误控制台中的 "JavaScript version 0.50.1" 是 package.json 文件中的 react-native 版本。确保它与错误控制台中的 "Native version 0.50.0" 版本相同。

  1. 我已经按照错误控制台中的提示将 react-native 版本更新为 "Native Version 0.50.0"。
  2. 重建应用 react-native run-android

对我来说,这是由于 package.json 文件的 dependency 部分中的 react-native 版本。它是:

"dependencies": {
"expo": "^27.0.1",
"react": "16.3.1",
"react-native": "~0.55.0"
}

我改成:

"dependencies": {
"expo": "^27.0.1",
"react": "16.3.1",
"react-native": "0.52.0"
}

现在可以正常使用了。

还要确保在您的模拟器中启用了 wifi

就我而言,安装新的虚拟设备很有帮助。现在我每个应用使用 1 台设备。

我使用的是物理设备,就我而言,这解决了问题:

  1. 卸载应用程序
  2. lsof -i :8081
  3. kill -9 PID
  4. 重建应用程序(react-native run-androidreact-native run-ios

尝试重新安装依赖项。这对我有用-

1.) yarn/npm install
2.) yarn/npm start --reset-cache

打开 projectdir/android/app/build.gradle

尝试:

编译("com.facebook.react:react-native:0.51.0") { force = true }

而不是 编译 "com.facebook.react:react-native:0.51.0" { force = true }

参考:Link

可能的修复:

  1. 删除包-lock.json
  2. 运行: watchman watch-del-all && rm -rf $TMPDIR/react-* && rm -rf $TMPDIR/haste-map-react-native-packager-* && rm -rf node_modules/&& npm install

如果问题依然存在,尝试直接从Xcode[=执行项目 25=]

这对我有用。

在我的例子中,我的 android 物理设备没有连接到我开发机器上的 js 服务器 运行。所以我必须在我的 android 设备上手动设置调试服务器主机和端口。

以我为例(不使用 expo 和 Android build)

package.json

"dependencies": {
    "react": "16.3.1",
    "react-native": "0.55.2"
}

和app.json

{
  "sdkVersion": "27"
}

已解决问题

我试图构建 运行 来自 WebStorm 的 React Native 应用程序,运行 解决了这个问题。对我来说简单的解决方案是:

watchman watch-del-all

在 macOS 上,如果尚未安装 watchman,请使用 Homebrew:

安装
brew install watchman

这尤其适用于 Android Studio 3.2 或更高版本的用户,因为这在升级之前似乎不会发生。

如果您没有在配置中更改 React Native 的版本 (package.json, build.gradle),版本不匹配的问题可能来自检出后未检测到的项目文件更改git 中的另一个提交。要克服这个问题,请确保:

  • 清理构建:Build > Clean Project

  • 将项目与 Gradle 个文件同步:在导航栏 Stop 按钮旁边

  • 制作项目:导航栏中第一个带锤子图标的按钮

  • 最后 运行 / 调试应用程序

这也可以解决 Session 'app': Error Installing APK 错误,一旦从设备上卸载应用程序,Instant 运行 可能会发生该错误。

Expo 用户 - 确保您的 app.json sdk 版本和 package.json expo 版本(可能相同)彼此兼容。

当您尝试 运行 而不关闭节点服务器时,有时会发生这种情况,其中之前的应用程序是 运行ning,因此请尝试重新启动 React.To 这样做,只是 运行 以下命令:

1. To kill current processes
killall node -9 

2. To Start React  Native
react-native start 

3. Then Run android
react-native run-android

对于我的情况,我在 iOS 遇到它,我尝试使用以下命令重置并清除所有缓存但也失败了,尽管许多评论说根本原因是反应packager 运行 在某个地方不小心,我重新启动了我的 mac 但问题仍然存在。

watchman watch-del-all && rm -rf node_modules/ && yarn cache clean && yarn install && yarn start --reset-cache

解决方法是,删除build文件夹@/ios/build,然后执行react-native run-ios就解决了

关闭 nodejs 终端并重建。

我能够通过删除 node_modules 和 运行 npm install 再次解决这个问题

我已经尝试了上面的解决方案,但将其添加到 AndroidManifest.xml 似乎可以解决问题。

  android:usesCleartextTraffic="true"

我更新了 react-native 版本:0.57.4 到 0.59.8,我收到以下消息 "React-Native Version Mismatch"

这个解决方案适合我:

1.- In the folder of the project, update all the code react-native in the Android Studio:

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/

2.- Go to Android Studio and FILE->>INVALIDATE CACHES/RESTART
3.- In Android Studio, BUILD->>CLEAN PROJECT
4.- In Android Studio, BUILD->>REBUILD PROJECT
5.- Delete App in simulator or Devices
6.- Run...

希望能帮到你!

就我而言,我手动更改了 expo 版本。我遇到了同样的问题,因为我忘记在 app.jsonbabel-preset-expo[= 中更新 sdkVersion 20=] 在 package.json

之后 运行:expo r -c 清除缓存并启动应用程序。

此答案发布于 2020 年, 通过 3 个步骤修复此错误:

第一步:根据 expo 文档(访问 here),我将 package.json 文件中 expo 的值更改为最新支持的版本。

第二步:我将 app.json 文件中 sdkVersion 的值更改为 package.jsonexpo 的相同值(与上一步相同)。

第三步:根据 expo 文档(访问 here),我将 package.json 文件中 react-native 的值更改为与 React Native Version 相同的值。 =23=]

现在你可以开始了。

使用npm install安装指定版本的依赖,然后npm start到运行项目

这对我有用:

react-native start --reset-cache

当 TypeScript 类型定义不匹配时,我得到了这个分类。

E.G react-nativedependencies 中的 0.61.5 和 @types/react-nativedevDependencies 中的 0.60.0。

我一更新 devDependencies,它就起作用了。不必重新启动任何东西。

我更新了 app.json 中的 SDK 版本以与 package.json 中的 React Native SDK 版本匹配以解决此问题

在app.json

"sdkVersion": "37.0.0",

在package.json

"react-native": "https://github.com/expo/react-native/archive/sdk-37.0.1.tar.gz",

为您的 javascript 版本编辑您的 package.json

"react-native": "^0.50.1",

在运行

之后
npm install

所有关于更改版本以匹配对我来说有问题的答案。

错误没有告诉您该版本的来源。 运行 搜索所有文件,我发现只有 1 个地方定义了 javascript 版本: 问题是捆绑包 (\android\app\src\main\assets\index.android.bundle) 需要重新生成,因为与已安装的捆绑包相比,它包含旧版本。

为了重新生成该文件,我必须运行执行以下命令:

react-native bundle --platform android --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

并且因为我已经升级了我的 react-native,运行执行这个命令给了我一些我需要解决的错误(主要是安装新的依赖项)。

正在清除缓存,在 android studio 中重新加载,重新加载 react,重新加载终端,创建一个新项目并传输文件,运行ning watchman,所有这些都没有作为特定的捆绑文件工作恰好在 Git 存储库中被跟踪。

对于 运行 monorepo 的我来说,yarn.lock 里面有一个隐藏的 react-native 版本。它不存在于任何 package.json 中,但从未被删除。

我从 yarn.lock 中删除了那个特定的 react-native 版本,并做了

yarn install

这清除了很多旧东西并确保一切正常。

这对我有用

expo update 39.0.0 --npm

因为我的 expo 版本是 38(签到 package.json)。

我从 找到了答案,我想把它放在这里。

First step: I changed the value of expo in package.json file to the latest supported version, according to expo documents(visit here).

Second step: I changed the value of sdkVersion in app.json file to the same value of expo in package.json.( equal number to last step).

如果 sdkVersion 不存在于您的 app.json 文件中,请像这样添加。 "sdkVersion": "xx.x.x"(与 package.json 中的 expo 版本相同)

Third step : I changed the value of react-native in package.json file to the same value of React Native Version , according to expo documents(visit here).

从您的设备中删除您的应用程序,然后重新安装

对于我的问题,在 API 级别低于 28 时更改模拟器时解决此问题。这个问题的根源是 API 级别 28 及以上的网络变化。通过添加

解决这个问题
<application
     android:usesCleartextTraffic="true"

到androidManifest.xml

我在手动更新我的包后遇到了这个问题。 从 Expo Go 应用中删除所有项目 运行 expo update 自动为我解决问题。

对我来说,我不得不打开多节点 js 终端以响应本机,并且在 运行 将应用程序连接到我的 android 设备之前忘记关闭。 我关闭终端并再次 运行 并成功加载页面

安装一个新的模拟器并关闭所有曾经为我工作的终端,只有当我从 Android Studio 中 运行 时。现在它不再起作用了。

有点违反直觉,但我注意到当我从 Android Studio 运行 收到该错误时,metro bundler 终端没有启动。

所以我从终端执行了 npx react-native run-android(这没有用,但它确实启动了 metro bundler),然后我 运行 来自 Android Studio 的那个应用程序并且它工作了!