Исключить указанный c пакет из сборщика реакции метро при сборке - PullRequest
3 голосов
/ 14 июля 2020

У меня есть библиотека, которая требует:

  • rnkata. js при работе в собственном реагировании
  • webkata. js при работе в браузере
  • nodekata. js при работе на узле

Этот хак работает нормально, пока я нацелен только на node / web:

if (getEnv() == "node") {
  eval('require')('nodekata')
} else {
  require('webkata')
}

Но как только я начал ориентироваться на мобильные устройства , сборщик метро пожаловался бы, что "webkata недоступна":

if (getEnv() == "node") {
  eval('require')('nodekata')
} else if (getEnv() == "mobile") {
  require('rnkata')
} else {
  require('webkata')
}

Очевидно, я не могу использовать тот же метод eval - иначе я сломаю либо webpack, либо RN. Есть ли документация о том, как справиться с этой ситуацией? IE: как я могу подавить объединение или интерпретацию вызова 'require' платформой.

Есть ли функция «подавлять по имени модуля»? Или каким-то другим способом получить модуль c для конкретной платформы?

1 Ответ

0 голосов
/ 14 июля 2020

Metro недавно добавила поддержку опционального импорта. Он должен быть доступен в React Native v0.63.0. См. this issue и this PR для более подробной информации.

Вы также можете подумать о присвоении имен файлам, чтобы показать, какие платформы они поддерживают. Например:

index.js - web version
index.native.js - android & ios only version
index.android.js - android version
index.ios.js - ios version
...