React Native版本不匹配

276
当我初始化一个新项目并启动Xcode模拟器时,出现以下消息:

React-Native版本不匹配

Javascript版本:0.50.1 Native版本:0.50.0

请确保您已重建原生代码...

有人知道这里发生什么事情并能帮助我吗?

49个回答

460

以下是我对此所做的:

关闭所有终端并重新运行构建。

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

因此,代码从nodejs服务器获取的内容与本机内容冲突。


1
如果我不想关闭当前打开的终端(我有应用程序在运行),有其他的解决方法吗? - Dimitar Tsonev
1
@DimitarTsonev 你可以直接关闭由react-native打开的特定终端,该终端显示“Bundling 'index.android.js' 100.0% (1/1), done”。 - Val
1
build.gradle 中强制使用 React 依赖版本起作用了。感谢 @Val。 - jake oliver
哇,只需关闭终端并停止其他构建即可。感谢您的帮助。 - FONGOH MARTIN
如果您有多个应用程序正在运行,请更改端口|npm react-native run-android --port 8082|。 - garry
显示剩余3条评论

43

如果您使用create-react-native-app创建了React Native应用程序,您应该有一个app.json (expo)和一个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
  }
}

这个对我有用!快速更新:你可能不会直接使用npm模块来安装react-native包,而是使用tarball文件。如果是这种情况,你可以使用react-native status来验证你的RN版本。 :) - blakeface

16

只需前往android/app/build.gradle文件,然后在dependencies部分添加以下内容:

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

React Native版本可以在package.json中找到。


5
我应该在哪里更改iOS设置? - Anurag Shrivastava
在 package.json 中的等效更改是什么? - Nate Glenn
我知道这是一个旧答案,但“force”并没有被弃用。(而且现在已经实现了编译) - FMaz008

9
只需在 Android 应用级别的 gradle 文件中,dependencies 部分强制指定 React Native 版本。
compile ("com.facebook.react:react-native:0.52.0") { force = true }

对我有用


3
这对我很有效。我的版本是0.53.3。我添加了一个0.53.3的force,重新启动了终端,运行了 npm start -- --reset-cache,然后运行了 react-native run-android - Florin Dobre

8
对于Android开发者而言,如果仅仅是关闭并重构无法解决问题,那么你需要手动在模拟器/设备上卸载该应用。

3
从 IOS 模拟器中卸载该应用程序对我有效。 - Sait Banazili

8
如果您通过Expo运行React Native应用程序,则升级React Native可能会导致此错误(如https://github.com/expo/expo/issues/923中所述)。
如果您处于这种情况下,您有以下选择:
  1. 将Expo(列在您的package.json中)升级到与您的React Native版本兼容的版本(如果存在兼容的版本,否则可能不是这种情况 - 根据链接的问题,我认为Expo支持落后于React Native发布)。
  2. 放弃更改,删除并重新安装您的Node模块,从Expo中Eject,然后(在检查了您可以在ejection后仍然运行应用程序的情况下)再次尝试升级。

在撰写本文时,Expo仅支持react-native版本达到59.8。有关expo/react-native兼容性,请参见https://docs.expo.io/versions/latest/sdk/overview/#sdk-version。(虽然这不是与OP的确切错误相同,但似乎值得注意。) - Tijs Maas

7
我以前从未见过这个错误,但每当我无法让Xcode和React-Native良好协作时,我会做一些事情。首先检查我正在使用的Xcode版本。如果需要更新,我会进行更新。然后清除watchman和缓存是我去的第二个地方。我不使用重置缓存命令。它总是说我需要验证缓存,所以我跳过了这一步(你可以这样做,我只是感到困惑)。我使用rm -rf $TMPDIR/react-*来消除任何缓存构建。如果这样还不行,我尝试在Xcode中构建应用程序,然后逐步处理,最终使用react-native run-ios进行构建。看起来您可以从尝试使用Xcode构建开始解决这个错误消息。希望有所帮助……让我知道您的进展。祝好运!(另外,您可以尝试更新到RN 0.51以尝试同步您的版本。)

另一件事是我尝试了一下 Expo。不知道那是否会导致问题。 - Sam Rao
你可以直接运行 npm install --save react-native@0.51 命令,但我建议先使用 Xcode 进行构建。你已经尝试过了吗?如果需要帮助,请告诉我。 - Jared Nelson

7
我曾经遇到过这个问题,但以上提供的解决方案都没有帮助到我。我正在升级一个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,一切都恢复正常了。

6

我正在使用一个物理设备,在我的情况下,这解决了问题:

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

在iOS模拟器上,只需杀掉lsof -i:8081中的所有PID并重新构建即可解决问题。 - Ronan Boiteau
这里也一样 - 尝试了Rimraf node_modules、npm start —reset-cache等方法 - 都没有效果。然后我按照上面的方法 - 卸载应用,使用taskkill /im node.exe和taskkill /f /PID(最后一步给出的现有PID号码),然后运行react-native run-android。非常成功! - user1641906

5
在你的 build.gradle 文件中添加以下内容:
implementation ("com.facebook.react:react-native:0.51.0") {
    force = true;
}

请在您的package.json文件中将0.51.0替换为相应的版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接