Невідповідність нативній версії React


196

Отримання наступного повідомлення, коли я запускаю новий проект, а потім запускаю емулятор Xcode:

Невідповідність реактивних версій

Версія Javascript 0.50.1 Рідна версія: 0.50.0

Переконайтеся, що ви відновили нативний код. ...

Хтось знає, що тут відбувається, і може мені допомогти?

Відповіді:


342

Ось що я зробив з цим:

Закрийте всі термінали і запустіть збірку заново.

Ви можете забути закрити nodejs-термінал з іншого проекту, і у них, можливо, встановлена ​​інша версія реагування.

Таким чином код отримує з сервера nodejs конфліктує з рідним.


1
що робити, якщо я не хочу закривати свої наразі відкриті термінали (у мене там запущені програми)? Чи є інше рішення?
Димитър Цонев

1
@DimitarTsonev, ви можете просто закрити той конкретний термінал, який відкрито react-native, який показує Bundling 'index.android.js' 100.0% (1/1), done.
Валь

1
змусити повністю використовувати версію залежності реакції в build.gradleвідпрацьованій. дякую @Val
Джейк

Закрили всі термінали та використали:react-native run-ios
Steffo Dimfelt

також запустіть, pod installякщо ви використовуєте какаоподи.
Масив

36

У випадку, якщо ви створили свій власний додаток для реакції, використовуючи create-react-native-app. У вас повинен бути 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 для свого реактивного пакету, а натомість маєте тарбол. Якщо це так, ви можете скористатися статусом нативної реакції для підтвердження вашої версії RN. :)
blakeface

15

Просто перейдіть до свого android/app/build.gradleі потім додайте до dependenciesрозділу:

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

/// рідну версію реакції можна знайти в package.json


5
де я міняю на ios
Анураг Шрівастава

яка рівнозначна зміна в package.json?
Нейт Гленн

8

просто змусити реагувати нативну версію у файлі Gradle на рівні програми для Android, у dependenciesрозділі.

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

працював на мене


2
Це працювало для мене. У мене 0,53,3. Я додав сили з 0,53,3, перезапустив термінали, побіг npm start -- --reset-cacheта побігreact-native run-android
Флорін Добре

6

Я ніколи раніше не бачив цієї помилки, але коли я не можу змусити Xcode та React-Native добре грати разом, я роблю пару речей. Перевірте, з якою версією Xcode я працюю. Якщо її потрібно оновити, я її оновлюю. Тоді очищення сторожа та кеш - це друге місце, на яке я йду. Я не використовую команду скидання кешу. Це завжди говорить, що мені потрібно перевірити кеш, тому я пропускаю це (ви можете це зробити, хоча я просто заплутався). Я використовую rm -rf $ TMPDIR / react- *, щоб позбутися будь-яких кешованих складок. Якщо це не працює, я намагаюся скласти додаток у Xcode, а потім попрацювати звідти, щоб створити його з нативної реакції. З цим повідомленням про помилку, здається, ви можете почати, намагаючись створити його за допомогою Xcode. Сподіваюся, що це допоможе ... дайте мені знати про ваш прогрес у цьому. Удачі! (Також ви можете оновити до RN 0.


Інша річ, що я грав на виставці. Цікаво, чи це зіпсувало речі
Сем Рао

Ви можете просто зробити npm install --save react-native@0.51 Але спершу я спробую створити його з Xcode. Ви це зробили ще? Якщо вам потрібна допомога, дайте мені знати.
Джаред Нельсон

6

Якщо ви запускаєте додаток React Native через Expo, оновлення React Native може спричинити цю помилку (як зазначено на https://github.com/expo/expo/isissue/923 ).

Якщо це ваш сценарій, ваші варіанти:

  1. Bump Expo (який вказаний у вашій package.jsonверсії) на версію, сумісну з вашою версією React Native ( якщо така існує, що може бути не так - судячи з пов'язаної проблеми, я вважаю, що підтримка Expo відстежує React Native релизи).
  2. Відмовтеся від змін, видаліть та встановіть знову свої модулі «Вузол», « Витягніть з Expo», а потім (перевіривши, чи зможете все-таки запускати додаток після викидання), спробуйте оновити ще раз.

Expo підтримує лише реакцію на до 59,8 на момент написання. Про сумісність expo / react , див. Docs.expo.io/versions/latest/sdk/overview/#sdk-version (це не та сама причина помилки, що і ОП, але, мабуть, має значення для примітки.)
Tijs Maas

6

У мене ця проблема була найдовше, і жодне з перерахованих вище рішень не допомогло. Я опинився в середині модернізації, що реагував у create-react-native-appпроекті, поки не з'ясував, що не всі версії Expo підтримують останню React Native.

Знайдено цю сторінку, пов’язану в документації, яка показує, які комбінації версій React Native, React та Expo офіційно підтримуються:

Джерело: https://github.com/react-community/create-react-native-app/blob/master/VERSIONS.md

Редагування app.jsonі package.jsonфайлів відповідно відповідні версії і працює npm installотримали всі знову працює.


6

Я використовую фізичний пристрій, у моєму випадку це вирішило проблему:

  1. Видаліть додаток
  2. lsof -i :8081
  3. kill -9 PID
  4. Відновіть додаток ( react-native run-androidабо react-native run-ios)

Просто вбивство всіх PID lsof -i :8081та перебудова зробив це для мене на iOS Simulator.
Ронан Боуто

Тут же - спробували Rimraf node_modules, npm start —reset-cache тощо - нічого не вийшло. Потім я зробив як вище - видалив додаток, використав taskkill / im node.exe та taskkill / f / PID (номер, вказаний на останньому кроці, існуючого PID), а потім реагував на натиснуту програму Android. Працювали частування!
user1641906

5

Для розробників Android, які не змогли виправити це шляхом просто закриття та відновлення, вручну видаліть додаток на емуляторі / пристрої.


3
Видалення програми з тренажера IOS працювало на мене.
negative_zero

5

У свій файл build.gradle додайте наступне

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

замініть 0.51.0версію в пакеті.json


4

Спробуйте встановити залежності ще раз. Це працювало для мене,

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


3

Для мене це було завдяки react-nativeверсії в dependencyрозділі package.jsonфайлу. Це було:

"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"
}

Зараз це прекрасно працює.


3

У моєму випадку я стикаюся з цим на iOS, і я намагався скинути і очистити весь кеш за допомогою команди нижче, але теж не вдався, незважаючи на багато коментарів, що першопричиною є те, що пакувальник реакції працює десь випадково, я перезапустив мій mac і проблема все ще залишилася.

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

Рішення полягає в тому, щоб видалити папку збірки @ /ios/build, а потім виконати react-native run-iosїї вирішити


3

Я спробував рішення вище, але додав це до AndroidManifest.xml, здається, це виправляє.

  android:usesCleartextTraffic="true"

1
Це спрацьовувало як шарм .. це причина, коли я ніколи не люблю андроїд .. Завжди є чарівне слово, яке вирішує ваші проблеми, які зводили вас з розуму протягом багатьох годин.
picacode

2

Для інших із тією ж проблемою на iOS з CocoaPods:

Я спробував усі рішення вище, без удачі. У моєму проекті є деякі пакети з натурними залежностями, а деякі з тих необхідних модулів стручка встановлюються. Проблема полягала в тому, що React був вказаний у моєму підфілі, але React pod не автоматично оновився react-native-git-upgrade.

Виправлення полягає в тому, щоб оновити всі встановлені стручки, запустивши cd ios && pod install.


2

У моєму випадку встановлення нового віртуального пристрою допомогло. Зараз я використовую 1 пристрій на додаток.


2

Користувачі Expo - переконайтеся, що app.jsonверсія SDK та package.jsonExpo (можуть бути рівними) сумісні між собою.


Дякую! Це було рішення для нового користувача expo.
Джаспер Блюз

1

У мене також виникла ця проблема за допомогою Expo та iOS Simulator. Те, що для мене спрацювало, - стирання симулятора вHardware > Erase All Content and Settings...


Я майже впевнений, що цього можна досягти, просто видаливши програму Expo з емулятора. Не потрібно все.
Аджай

1

Можливе виправлення:

  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

Це працювало для мене.


1

У моєму випадку (НЕ використовуючи expo та збірку Android)

package.json

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

І app.json

{
  "sdkVersion": "27"
}

вирішили питання


Це справедливо, особливо якщо ви використовуєте Expo. Перегляньте документи оновлення Expo для отримання додаткової інформації: docs.expo.io/versions/latest/workflow/…
blakeface

1

Я намагався створити і запустити додаток React Native від WebStorm і зіткнувся з цією проблемою. Простим рішенням для мене було:

watchman watch-del-all

На macOS, якщо він watchmanще не встановлений, встановіть його за допомогою Homebrew :

brew install watchman

1

Буває, коли ви намагаєтеся запустити, не закриваючи сервер вузлів, на якому працював попередній додаток, тому спробуйте перезапустити React. Для цього просто запустіть такі команди:

1. To kill current processes
killall node -9 

2. To Start React  Native
react-native start 

3. Then Run android
react-native run-android

1

У моєму випадку я змінив expoверсію вручну. У мене виникла та сама проблема, тому що я забув оновити sdkVersion в app.json та babel-preset-expo в package.json

Після цього запустіть: expo r -cочистити кеш і запустити додаток.


1

Виправлення, яке ми зробили, було впевнене, що змінні ANDROID_HOME та PATH були встановлені перед збіркою.

Спочатку запустіть наведені нижче дві команди, потім складіть додаток для пристрою.

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

1

Цю класифікацію я отримав, коли визначення TypeScript не відповідали.

EG react-nativeпри 0,61,5 дюйма dependenciesта @types/react-nativeпри 0,60,0 дюйма devDependencies.

Як тільки я оновив devDependitions, це спрацювало. Не довелося нічого перезапускати.


0

Це не виправлення, але в моєму випадку на моєму пристрої було встановлено кілька додатків RN, і я несвідомо намагався "Перезавантажити" з невірної програми. (Я зараз розробляю два додатки одночасно) Тому переконайтеся, що ви в правильній програмі!


0

Спробуйте змінити версію назви реагування, вказану в пакеті.json (в залежності від назви), на ту, що і "Native Version", показану в повідомленні про помилку. Потім знову запустіть 'npm install'.


будь-яка ідея, як перейти на версію, згадану в package.json?
HungrySoul

у вашому пакеті.json ви повинні побачити щось на кшталт "реагувати-нативно": "^ 0.55.0" у розділі "залежності". Змініть це число (0,55,0 у цьому прикладі) на бажану версію та запустіть "npm install" ще раз.
Pnar Sbi Wer

0

У мене виникла та сама проблема під час створення мого рідного додатка для андроїдів, і я зробив наступне, що працювало на мене.

"JavaScript версії 0.50.1" на консолі помилок - це початкова версія у вашому package.jsonфайлі. Переконайтеся, що це та сама версія, що і "Native version 0.50.0" на консолі помилок.

  1. Я оновив рідну версію реакції на "Native Версія 0.50.0", як було запропоновано в консолі помилок.
  2. Відновіть додаток react-native run-android.


0

Відкрито projectdir / android / app / build.gradle

Спробуйте:

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

Замість компілювати "com.facebook.react: react-native: 0.51.0" {force = true}

Посилання .: Посилання

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.