Что означает «URL-адрес отсутствует в пакете» в реакции-нативном?


200

Когда я запускаю реактивный проект, я получаю ошибку no bundle URL present, но я не знаю, какие ошибки я делаю, я был очень смущен.

введите описание изображения здесь


2
Я столкнулся с этой проблемой в приложении iOS. Просто откройте xcodeproj в папке ios в xcode и запустите его оттуда. Убедитесь, что вы не на прокси.
Абхай Широ

9
Большую часть времени мне помогает очистка каталога сборкиrm -rf ios/build/
onmyway133

Это помогает мне в большинстве ситуаций. Но в данном конкретном случае мне удалось исправить эту ошибку с помощью этой команды (act-native: "0.60.4"):watchman watch-del-all
О. Борчухин

Обычно это означает, что ваш Metro-пакет не работает, некоторые люди запускают его в своих собственных терминалах или на стандартном компьютерном терминале. Я обычно закрываю терминал, перезагружаю приложение и это исправляет.
Сара Инес Кальдерон

Ответы:


128

Решите ошибку No bundle URL present:

  • Выполните следующую команду в корневом каталоге вашего проекта, чтобы удалить каталог сборки iOS и убить другие сеансы React Native (при условии, что они работают на порте 8081 по умолчанию) перед повторной сборкой:

rm -rf ios/build/; kill $(lsof -t -i:8081); react-native run-ios

  • Обновите рабочий процесс React Native, чтобы избежать возникновения этой ошибки, объединяя вышеуказанную комбинацию команд в псевдоним и добавляя его в файл конфигурации Bash .bashrc с помощью этой команды:

echo "alias rni=\"kill \$(lsof -t -i:8081); rm -rf ios/build/; react-native run-ios\"" >> ~/.bashrc; source ~/.bashrc

Теперь вы можете запустить сборку React Native iOS (не беспокоясь о некоторых распространенных красных экранах появления ошибок) с помощью простого ярлыка псевдонима:

rni


1
Очень полезно для меня. Единственное, что мне нужно было сделать, - это выйти из симулятора, если он еще не закрыт.
AnnawanDev

74

Я только что столкнулся с этой проблемой (впервые начал работать с React Native). Проблема исчезла, когда во время работы ios simulation ( react-native run-ios) я запустился, npm installа затем react-native run-iosснова. В окне терминала показывалось, что это пакетирование, а затем симулятор показал экран приветствия.

Проверьте эту ссылку для кратких обзоров после react-native init PropertyFinderстроки, пытайтесь использовать npm start(этот работает для меня)

================================================== ======================

ОБНОВЛЕНИЕ для 16,9

Мой порт 8081 был заблокирован McAfee. Использование другого порта напрямую не работало react-native start --port=8082иreact-native run-ios --port=8082

Перепробовал практически все решения, приведенные здесь. но ничего не получалось.

        "react": "16.9.0",
        "react-dom": "^16.12.0",
        "react-native": "0.61.5",

Решение:

Произведен поиск 8081 в Xcode и замена всех их на 8082. Затем выполните те же команды для сборки и запуска приложения. Приложение работает плавно

react-native start --port=8082
react-native run-ios --port=8082

введите описание изображения здесь


2
@dcp Вы пробовали запускать «response-native run-ios» несколько раз, пока он уже загружен? Кажется, что каждый раз, когда я раскручиваю свое приложение, мне нужно делать это как минимум дважды (ожидание около 2 минут между каждым разом).
Пропустить Сува

работает для меня, но хотел бы найти долгосрочное решение, которое не включало бы этот шаг каждый раз.
mheavers

31

У меня была такая же проблема, когда я связывал свое приложение. Убедитесь, что вы main.jsbundleнацелены на ваш основной проект


3
Это как-то случилось со мной как часть моего реакции на 0,60.
IonicBurger

ссылка на видео для того же, youtube.com/watch?v=eCs2GsWNkoo
jrhamza

это случилось и со мной. но потом я нажал на него. но все та же проблема
Джейсон Дж

29

Как указано в сообщении об ошибке:

Для получения лицензии Xcode / iOS требуются права администратора, пожалуйста, запустите «sudo xcodebuild -license», а затем повторите эту команду.

Выполнение следующей команды сработало:

sudo xcodebuild -license

ткс это работа для меня после запуска в терминале и сборки в Xcode после
TSS HSU

Нет. Все еще не работаю для меня. Я работаю в другом порту, 8081 заблокирован
Ашиш Сингх Рават

28

Эта проблема возникает, когда вы не разрешаете незащищенные соединения через локальный хост или, возможно, вы пытались принять незащищенные соединения через http.

Чтобы это исправить, добавьте это на info.plist:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSAllowsArbitraryLoadsInWebContent</key>
        <true/>
        <key>NSAllowsLocalNetworking</key>
        <true/>
    </dict>

4
Какой герой этот парень. Спасло меня и мой макбук от выпрыгивания из окна! Я изменил свой домен исключений с localhostмоего локального сетевого адреса в Info.plist и, следовательно, он не разрешался. Я добавил блок для localhost в качестве домена исключения, и это сработало.
Дарий

1
Серьезно, твой ответ пришел мне как бог .... брат, ты молодец ... У меня нет слов. спасибо, я застрял в этом с четверга.
Тушар Пандей

26

Закройте симулятор и терминал. Откройте новый и перейдите к своему проекту, а затем обновите свой реагирующий нативно так:

react-native upgrade

Проблема в: бесконечная рекурсия в RCTFatal, когда пакет не выполняется .


1
да, но в моем случае мне не нужно было обновляться. Мне хватило закрытия терминала и симулятора.
Джанни

@gianni Какую версию response-native вы используете сейчас?
Матео Маркони

1
Казалось, не имеет никакого значения, все еще видя ошибку.
SSH это

2
Это сработало для меня, но вы также должны закрыть симулятор и запустить
Джеймс О'Брайен,

1
Не помогло `` `информация Ни одна версия не прошла. Загрузка последних ... warn Указанная версия "0.61.5" уже установлена ​​в node_modules и удовлетворяет диапазону "0.61.5". Не нужно обновлять `` `
Ашиш Сингх Рават

19

Причина:

Это потому, что приложение не может найти сервер (который обслуживает пользовательский интерфейс - по коду JavaScript).

Решение:

  • Удостоверьтесь, что все, что связано с реакцией, закрыто (не обязательно, просто чтобы иметь чистое начало для моего решения, после моего объяснения, вы можете понять, нужно это или нет)
  • запустить npm run startили yarn startпервым
  • дождитесь выполнения этой команды (обычно вы увидите Loading dependency graph, done.)
  • бегать react-native run-ios/android

Объяснение:

  • React Native состоит из 2 частей:

    • Родная часть
    • Часть Javascript
  • Команды сборки:

    • react-native run-ios/androidсостоит в том, чтобы создать собственную часть, затем развернуть на устройствах и запустить приложение на устройствах (симулятор / эмулятор / реальное устройство). Обычно это занимает 3 ~ 4 минуты, чтобы закончить.

    • npm run startили yarn startсоздать часть javascript и запустить сервер dev для обслуживания встроенного пользовательского интерфейса приложения. Обычно это занимает 30 секунд, чтобы закончить.

=> Обычно, часть javascript заканчивается сначала, а потом - нативная. (основываясь на времени, которое они использовали).

=> это верно только для первой сборки (свежей сборки).

=> для восстановления:

  • Нативная часть просто заняла 10 ~ 15 секунд, чтобы проверить изменения, и потому что никаких изменений для нативной части => не было сделано до того, как часть javascript была собрана и обработана. (Я не уверен, что часть javascript была перестроена или нет, но это заняло больше времени, чем нативная часть)

  • Вот почему у нас возникла эта проблема, приложение запустилось и потребовало вещи, которой еще не было.

Бонус:

  • react-native run-ios/android автоматически запустит сервер разработки для вас.
  • Вот почему, когда вы бежали react-native run-ios/androidсразу после этого react-native init <app_name>, все работало хорошо. (потому что функция автоматического запуска и время были взяты для новой сборки, как указано выше).
  • Другие «удаляющие» решения работали, потому что они заставляли восстанавливать.

Время, использованное в этом ответе, было относительно моей машины => может отличаться от других.


14

Попробуйте запустить этот код:

$ sudo xcodebuild -license

Это может решить проблему. Это работает для меня.


11

У меня была та же ошибка, и я смог запустить приложение только через XCode. react-native run-iosне сработало. Для решения проблемы вам необходимо удалить buildпапку по адресу YOUR_PROJECT/ios/build/. После этого вы сможете снова запустить приложение react-native run-ios. Надеюсь это поможет.


9

В большинстве случаев эта проблема возникает, когда при поиске DNS / IP-поиске не удается найти localhost.

Решение :

Попробуйте добавить IP-адрес localhost в ваш файл хоста etc.

Вы можете добавить следующие строки в ваш файл хоста etc (/ etc / hosts)

127.0.0.1 localhost

255.255.255.255 широковещательный хост

:: 1 л. ocalhost

Чтобы подтвердить, что это проблема, вы можете нажать на URL пакета в Safari (если вы попробуете это в Chrome, это разрешит, но Safari не сможет решить). HTTP: // локальный: 8081 / index.ios.bundle платформа = ИОС & DEV = верно и преуменьшать = ложь


После перехода на новый компьютер это было то, что мне было нужно. TY!
Jeffctown

Да же здесь на новом компьютере!
Вишал Сакария

Моя проблема заключалась в настройке прокси в моей конфигурации сети, я просто удаляю прокси, и он работает хорошо.
Ахмад Хани

8

Убедитесь в правильности настроек ATS в файле .plist.

Вы можете найти файл по адресу

localhost должен быть определен как цель запроса на исключение следующим образом:

<key>NSAppTransportSecurity</key>
    <dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>localhost</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

* (не забудьте удалить это в релизной версии ..)


7

Для меня проблема заключалась в том, что он не мог создать пакет JS. Это не заявляет об ошибке при сборке из Xcode, поэтому у вас нет возможности узнать это. Чтобы найти ошибку, выполните следующую команду.

react-native bundle --platform ios --dev false --entry-file index.ios.js --bundle-output ./ios/release/main.jsbundle --assets-dest ./ios/release/main.jsbundle

Для меня ошибка была что-то с отсутствующим компонентом PureRenderMixin. Решение, которое можно найти здесь: https://github.com/facebook/react-native/issues/13078 . Как правило, вы должны вручную установить response@16.0.0-alpha.3. Это можно сделать с помощью этой команды.

npm i --save react@16.0.0-alpha.3

Эта проблема теперь возникает для всех, потому что выпускаются более новые версии реагирующих альфа-версий (особенно альфа-5), и они ломают сборки реагирующих нативов.


команда'act-native bundle --platform ios --dev false --entry-file index.ios.js --bundle-output ./ios/release/main.jsbundle --assets-dest ./ios/release/ main.jsbundle 'опишет любую ошибку при сборке пакета. пока эта команда не будет выполнена успешно, run-ios не будет работать
eric f.

моя текущая ошибка в том, что '@connect' из'act-redux 'как-то не распознается?
Эрик Ф.

Может быть, попробуйте добавить "plugins": ["transform-decorators-legacy"]в ваш файл .babelrc. Или попробуйте с подключением HOC.
urbancvek

@urbancvek, для меня ошибка в том, что это библиотека The node type SpreadProperty has been renamed to SpreadElementссылок @babelвнутри node_modules, я не нашел ничего, что решило эту проблему .
Даниэль

7

Решение -> npm startзатем откройте новый Терминал и перейдите к пути вашего проекта, а затем нажмите react-native run-iosего работает для меня


7

Что решило это для меня:

  • Откройте окно терминала
  • cd в YOUR_PROJECT/ios
  • Удалить папку сборки с rm -r build
  • Запустить react-native run-iosснова

Кроме того, вы можете открыть Finder, перейти к папке YOUR_PROJECT/iosи удалить ее build.

Тогда беги react-native run-iosснова.

Источник: Эндрю Бэнкрофт


5

Это проблема с response-native v0.42.1. Попробуйте закрыть все терминалы и экземпляры XCode и запустите:

launchctl unload ~/Library/LaunchAgents/com.github.facebook.watchman.plist
watchman version
react-native run-ios

3
«Это проблема с response-native v0.42.1.» - Она существует и с v.0.43.
DCP


5

Просто запустите в Терминале react-native start:

cd your react native app directory/ react-native start 

Он запустит упаковщик, теперь не закрывайте это окно терминала, в другом окне терминала запустите ваш проект. Это единственное желание, которое я нашел, чтобы заставить его работать должным образом.


4

Я нашел самый простой / быстрый способ обойти это, чтобы выйти из приложения в симуляторе (2 х Cmd + Shift + H) и перезапустить.


4

У меня была такая же проблема. Но моей проблемой было то, что мой Mac и iPhone не были в одной сети Wi-Fi.

Поэтому убедитесь, что все они находятся в одной сети, и восстановите их еще раз. Если это не так, попробуйте решения, упомянутые другими участниками здесь.


3

проверьте свой сетевой прокси, лучше выключите его.

или вы должны найти другой способ сохранить сервер упаковщика


Спасибо, я открыл глобальный VPN, чтобы пересечь Великую Огненную Стену!
BaiJiFeiLong

Я отключил автоматическую настройку прокси в Mac. Это сработало после 2 дней усилий: D ... Спасибо.
Нирав Джайн

Я действительно запускал VPN, который даже не помнил. выключение сработало!
Педро Маркиз

3

Это случилось и со мной после перезапуска моего Mac. При запуске приложения на симуляторе открывается окно терминала launchPackager. Я закрыл это окно и завершил процесс (я также закрыл симулятор), затем снова запустил реакцию-родной run-ios, и все работает нормально.


3

В моем случае проблема была исправлена ​​путем перезапуска adbсервера:adb kill-server && adb start-server


3

У меня тоже была эта проблема ... проблема была в том, что упаковщик не работал, казалось, потому что моей оболочкой по умолчанию была zsh. Реактивные шины, чтобы открыть новое окно терминала и запустить, .../node_modules/react-native/packager/launchPackager.commandно это не сработало. Выполнение этого вручную (и поддержание его работы) исправило это для меня.


3

проверьте ваш ключ 'localhost' на NSExceptionDomains dict в info.plist

если он не существует, это вызывает ошибку.


2

Предполагая, что вы используете nvmи установлено несколько версий узла, вот решение:

  1. Скажи, что ты бежишь npm install -g react-native-cliвnode v6.9.5 .
  2. Теперь сделайте node v6.9.5по умолчанию, запустивnvm alias default 6.9.5
  3. Теперь беги react-native run-ios

Проблема в том, что у вас установлено несколько версий узла, nvmи для установки react-native-cliвы переключились или установили последнюю версию узла, которая еще не помечена как узел по умолчанию для указания nvm. При запуске react-native run-iosэто открывает другое новое окно терминала, в котором по умолчанию nvmне указывается версия узла, где вы установили react-native-cli. Просто следуйте приведенным выше настройкам, надеюсь, это должно помочь.


2

убедитесь, что у вас есть .jsbundle в вашем проекте

Добавить

react-native bundle --dev false --entry-file index.js --bundle-output ios/main.jsbundle --platform ios

в своем реактивном нативном коде попробуйте заново открыть проект


1

Я работаю с RN 0.49.5. Я перепробовал много методов, но никто не работает. Наконец я решил это. Это просто и легко.

Основная идея заключается в том, чтобы изменить localhostк 127.0.0.1, но это не там , где RN говорит вам. Он находится в RCTBundleURLProvider.m # - (BOOL) isPackagerRunning: (NSString *) хост .

Изменения кода: oc - NSString *host = ipGuess ?: @"localhost"; + NSString *host = ipGuess ?: @"127.0.0.1"; это нормально для симулятора. Если это устройство, просто измените IP-адрес на ваш компьютер.


Не могли бы вы уточнить свое решение?
Ашиш Сингх Рават

1

Еще одна вещь, которая работает для меня, это открыть проект в xcode, а затем очистить и собрать его. обычно он перезапускает сервер упаковки и решает проблему.


1

Выполните следующую команду:

killall -9 node
rm -rf ios/build
react-native run-ios

откроется launchpackager.command, и приложение будет установлено на симуляторе ios


0

Убедитесь, что launchPackage.commandработаете в терминале и попробуйте запустить снова. Это соберет комплект. Это что-то вроде webpack-dev-server.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.