Разбиение приложения React-Native на подключаемые модули

Я хочу написать приложение React-Native. Я хочу иметь возможность загружать новые модули во время выполнения на устройстве для расширения функциональности. Будет некоторая основная логика, которая знает, как запрашивать новые модули на основе ввода какой-либо формы, например, dbs. Я не хочу связывать все в единый монолитный пакет, который, как мне кажется, сейчас случается со встроенным упаковщиком.

Это будет похоже на то, как RequireJS работает в браузере. Мне нужно знать:

  • Как создать независимые модули? Отказоустойчивый пакет, похоже, не позволяет мне выбирать, какие корневые модули начинаться и работать только с корневым проектом.
  • Как я могу во время выполнения добавить новую функциональность в текущую среду JavaScript?

Ответ 1

Я смог получить что-то очень близкое к этому только в JS. Сначала мне пришлось выставить еще несколько опций в текущем наборе операторов-корреспондентов, главным образом, URL-адрес (чтобы изменить основной модуль) и черный список (чтобы не доводить привязку к варианту ответа во втором пакете) до своего упаковщика (http://github.com/facebook/react-native/blob/master/packager/README.md).

Затем мне пришлось написать пользовательский сборщик, который загрузил второй комплект и использовал бы eval() для оценки его в текущей среде.

Единственное, что мне пришлось добавить __d('react-native',[],require('react-native')) в первый пакет, который, я думаю, работает как define() из require.js. Это экспортирует "реагировать-родной" как непередаваемое имя, которое модули, к которым я подключаю, могут получить доступ через обычные require(). Сначала это немного запутывает, но из того, что я могу сказать, React-native packager работает немного как r.js(см. http://requirejs.org/docs/optimization.html).

Ответ 2

Реагируйте нативные начала, указывая на пакет JS. Это означает, что вам, по крайней мере, придется перезапустить приложение, чтобы перезагрузить пакет js (предполагая, что вы читаете его с сервера, а не с самого устройства ios).

Если у вас есть способ обновить js файлы на сервере (через какой-то веб-сервис, который обновляется на основе того, что делает пользователь), то перезапуск приложения теоретически может перезагрузить JS и предоставить новые функции для приложения.