Горячая перезагрузка не работает в реагировать родной Android

Я попробовал это на Windows 10 и Ubuntu 16.04. В обоих случаях "Горячая перезагрузка" работает только с изменениями в jsx, но нет, когда я меняю переменную, функцию или что-то еще в javascript. Горячая перезагрузка включена. Перезагрузка в реальном времени отключена. Когда я сохраняю изменения в редакторе кода Visual Studio, виртуальное устройство (android studio) перезагружается, но изменений там нет. То же самое на физическом устройстве в приложении EXPO.

Сначала я не установил сторож. Hot Relaod не работает. После его установки Hot Reload тоже не работает.

Я запускаю приложение с помощью create-реакции-native-приложения. Это не выбрасывается.

package.json:

{
  "name": "NativeReduxSaga",
  "version": "0.1.0",
  "private": true,
  "devDependencies": {
    "jest-expo": "25.0.0",
    "react-native-debugger-open": "^0.3.17",
    "react-native-scripts": "1.11.1",
    "react-test-renderer": "16.2.0"
  },
  "main": "./node_modules/react-native-scripts/build/bin/crna-entry.js",
  "scripts": {
    "start": "react-native-scripts start",
    "eject": "react-native-scripts eject",
    "android": "react-native-scripts android",
    "ios": "react-native-scripts ios",
    "test": "node node_modules/jest/bin/jest.js",
    "postinstall": "rndebugger-open --expo"
  },
  "jest": {
    "preset": "jest-expo"
  },
  "dependencies": {
    "@redux-offline/redux-offline": "^2.3.2",
    "expo": "^25.0.0",
    "prop-types": "^15.6.1",
    "react": "16.2.0",
    "react-native": "0.52.0",
    "react-native-autocomplete-input": "^3.5.0",
    "react-navigation": "^1.5.2",
    "react-redux": "^5.0.7",
    "redux": "^3.7.2",
    "redux-devtools-extension": "^2.13.2",
    "redux-logger": "^3.0.6",
    "redux-observable": "^0.18.0",
    "redux-promise-middleware": "^5.0.0",
    "redux-saga": "^0.16.0",
    "redux-thunk": "^2.2.0",
    "rxjs": "^5.5.7"
  }
}

сторож версия

{
    "version": "4.9.1",
    "buildinfo": "94e66865386e844f2cffe52e355a94c96562d2e3 2018-03-12T19:58:02.0000000Z"
}

версия узла v6.13.1

Я читал в некоторых статьях здесь, что это может помочь в Windows, чтобы поднять MAX_WAIT_TIME. Но у меня нет файла \node_modules\ Reaction-native\node_modules\node-haste\lib\FileWatcher\ index.js.

И почему он не работает на Ubuntu тоже?

Мне действительно нужен сторож? Как это должно быть настроено? Мой файл.watchmanconfig - это пустой объект, такой как {}.

Горячая перезагрузка обычно работает с create-реагировать-родной-приложение?

Кто-нибудь знает, что я могу попробовать здесь, чтобы заставить работать горячую перезагрузку? Спасибо за помощь!

10 ответов

На самом деле есть разница между Hot и Live Reloading.

Горячая перезагрузка - это мгновенная перезагрузка, сохраняя состояние вашего приложения без изменений. Тем не менее, он работает только внутри render метод и запускается только на расширениях классов React.Component и Component

Как в:

class A extends Component ...
class B extends React.Component ...

Live Reload, с другой стороны, перестраивает ваше приложение и сбрасывает состояние вашего приложения. Он включает в себя все, от переменных и методов до самых простых строк. Вот почему каждый всегда будет запускаться с начального экрана приложения (потому что состояние потеряно).

Надеюсь, поможет!

Удаление мерзавца index.lock файл работал на меня

rm -rf .git/index.lock

В Android перейдите к вашему MainApplication.Java поиск @Override public boolean getUseDeveloperSupport() { return true; }

Убедитесь, что он возвращает истину. Это может быть проблемой

Я сделал следующие шаги, чтобы решить эту проблему:

  1. mkdir android / app / src / main / assets

  2. Реактивный пакет --platform android --dev false - входной файл index.js - вывод-вывода android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/ основные / RES

  3. Встряхните устройство Android или cmd + d в симуляторе вы получите меню.

  4. После включения и отключения горячей перезагрузки.

  5. очистите любой IP-адрес, который вы используете в настройках Dev -> Debugging -> Debug server host & port для устройства.

  6. Включить горячую перезагрузку.

  7. В терминале перейдите в каталог вашего проекта

  8. реагировать на родной запуск андроид или запустить его прямо в вашей студии Android.

Альтернативное решение:

        "scripts": {
-    "start": "react-native-scripts start",
+    "start": "DEBUG=true react-native-scripts start",
  },

Чтобы это работало, вы должны убедиться, что этот файл не был изменен:

      // ./android/app/src/main/java/com/cubyn/storage/MainApplication.java

...
    @Override
    public boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG;
    }
...

ИМХО, это лучшее решение, потому что оно будет включено только во время разработки, а не при сборке для производства.

Для меня проблема была с AndroidX, в основном, когда-нибудь вам нужно перейти на AndroidX из-за реактивно-родных старых версий

просто откройте свой проект в Android Studio

Refactor -> Migrate to Android X ... и поток инструкции

и не избегайте делать резервную копию, когда она будет повышена для сохранения

У меня это работает, открывая порт 8081 на вашем Android-устройстве и, соответственно, на вашем компьютере:

        "scripts": {
    "start": "watchman watch-del-all && yarn run android:network && react-native start --reset-cache",
    "react:link": "react-native link",
    "android": "react-native run-android && yarn run android:network",
    "android:network": "adb reverse tcp:8081 tcp:8081 2>&1 || true",

Для тех, кто сталкивается с этой проблемой при использовании WSL 2, файлы должны существовать внутри подсистемы Linux, а не внутри любых подключенных папок Windows, чтобы наблюдение за файлами работало правильно. Взято из этого сообщения на Reddit:

Они изменили протокол обмена файлами с использования собственного протокола, разработанного на заказ, на протокол 9P, который в настоящее время может не поддерживать событие изменения файла.

Я считаю, что вы можете решить эту проблему, поместив свой код в файловую систему Linux (например, в домашний каталог вашего пользователя) и получив доступ к этим файлам через общий ресурс WSL, \wsl$\DISTRO_NAME из Windows.

В проводнике Windows, если вы перейдете к \wsl$, вы должны увидеть все установленные дистрибутивы WSL Linux и получить доступ ко всем файлам в их файловых системах.

Я думаю, что это прямой вперед

Также не забывайте бегать npm startв вашем текстовом редакторе, а не во внешнем редакторе, таком как git bash

Убедитесь, что в вашем каталоге.git нет файла index.lock. Удаление файла может решить вашу проблему.

Другие вопросы по тегам