Реагировать на собственные обновления горячей перезагрузки, но не обновлять изменения

Я знаю основы React и сделал несколько своих личных проектов на React. Теперь я начинаю с react-native.

Поэтому я создал новый проект и запустил команду run-android. Он выполнил всю необходимую обработку и запустил эмулятор (я использую эмулятор Android Genymotion),

react-native init AwesomeProject
cd AwesomeProject
react-native run-android

После этого в эмуляторе я включил горячую перезагрузку. Открыл проект и немного изменил код. Затем в эмуляторе я нажал r (дважды), он говорит fetching bundle. Но я получаю то же самое. Ничего не изменилось. Изменения не обновляются.

Итак, я закрыл терминал и снова запустил ту же команду

react-native run-android

Затем... он показал изменения. Я понятия не имею, что здесь не так. Я видел этот пост и подумал, что он может помощь. Но это не так.

Что я делаю не так? Я использую реактивную версию 0.30.0 и Node v6.3.1. Если это поможет, я нахожусь в Windows 7 и использую Nexus 6P в качестве эмулятора Android Genymotion.


person Kakar    schedule 02.08.2016    source источник


Ответы (2)


Отвечая на мой собственный вопрос. Это сообщение помогло мне.

Внутри этого файла \node_modules\react-native\node_modules\node-haste\lib\FileWatcher\ index.js

  1. Пришлось увеличить MAX_WAIT_TIME (мой я изменил с 120000 до 360000).
  2. Тоже пришлось поменять

Этот

key: '_createWatcher',
    value: function _createWatcher(rootConfig) {
      var watcher = new WatcherClass(rootConfig.dir, {
        glob: rootConfig.globs,
        dot: false
      });

      return new Promise(function (resolve, reject) {
        var rejectTimeout = setTimeout(function () {
          return reject(new Error(timeoutMessage(WatcherClass)));
        }, MAX_WAIT_TIME);

        watcher.once('ready', function () {
          clearTimeout(rejectTimeout);
          resolve(watcher);
        });
      });
    }

в

key: '_createWatcher',
    value: function _createWatcher(rootConfig) {
      var watcher = new WatcherClass(rootConfig.dir, {
        glob: rootConfig.globs,
        dot: false
      });

      return new Promise(function (resolve, reject) {

        const rejectTimeout = setTimeout(function() {
          reject(new Error([
            'Watcher took too long to load',
            'Try running `watchman version` from your terminal',
            'https://facebook.github.io/watchman/docs/troubleshooting.html',
          ].join('\n')));
        }, MAX_WAIT_TIME);

        watcher.once('ready', function () {
          clearTimeout(rejectTimeout);
          resolve(watcher);
        });
      });
    }

Теперь, после этих изменений, любые изменения кода, которые я делаю, мне даже не нужно дважды нажимать R, они автоматически меняются. Я надеюсь, что это может помочь нубу, как я. Спасибо.

person Kakar    schedule 02.08.2016
comment
В моем каталоге \node_modules\react-native\node_modules\ нет никакого каталога node-haste. Что я могу сделать? Иногда мое приложение обновляется, а иногда нет. Итак, что было бы легко возможным способом? - person Habib; 12.11.2018

я сделал 2 вещи

1) Измените значение MAX_WAIT_TIME на 360000 2) Нажмите Ctrl+M на эмуляторе Android и выберите «Включить горячую перезагрузку».

Теперь любое изменение кода отражается в эмуляторе менее чем за секунду.

person Sood    schedule 22.09.2016