React-native упаковщик завис

Редактировать

Я думаю, что проблема связана с тем, что сборщику не хватает памяти:

transform[stderr]: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [/usr/local/bin/node]

Временное решение

Я нашел достойное решение, вместо запуска react-native start я запускаю следующее, что позволяет увеличить лимит памяти:

node --max-old-space-size=8192 node_modules/react-native/local-cli/cli.js start

Мне все еще очень любопытно, почему выделенной по умолчанию памяти недостаточно для обработки моих файлов.

Подробное описание проблемы

Когда я запускаю react-native start, объединение всегда зависает в одном и том же месте:

Loading dependency graph, done.
 BUNDLE  [ios, dev] ./index.js ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░ 98.6% (842/848)

Примерно через 30 секунд клиент (мой телефон или симулятор, оба на ios) падает и в основном говорит, что не может подключиться к серверу разработки. Процесс связки никогда не падает и остается на этом этапе даже после сбоя клиента.

Есть ли способ найти, почему это происходит? Я пытался добавить --verbose в свою команду, но это не дало результата. Я немного сбит с толку, так как это работало несколько часов назад, и это внезапно произошло, хотя я не устанавливал ничего нового. Я уже пробовал многие, такие как перезагрузка/очистка кеша/удаление и переустановка модулей моего узла/….

На всякий случай, это как-то связано с моей установкой:

$ react-native info

  React Native Environment Info:
    System:
      OS: macOS 10.14
      CPU: (8) x64 Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz
      Memory: 2.50 GB / 16.00 GB
      Shell: 4.4.12 - /usr/local/bin/bash
    Binaries:
      Node: 8.9.4 - /usr/local/bin/node
      Yarn: 1.3.2 - /usr/local/bin/yarn
      npm: 6.4.1 - /usr/local/bin/npm
      Watchman: 4.9.0 - /usr/local/bin/watchman
    SDKs:
      iOS SDK:
        Platforms: iOS 12.1, macOS 10.14, tvOS 12.1, watchOS 5.1
    IDEs:
      Xcode: 10.1/10B61 - /usr/bin/xcodebuild
    npmPackages:
      react: ^16.8 => 16.8.6
      react-native: ^0.59.2 => 0.59.2
    npmGlobalPackages:
      create-react-native-app: 1.0.0
      react-native-cli: 2.0.1
      react-native-git-upgrade: 0.2.7

У меня также есть очень большие файлы .js (> 9M), я не знаю, может ли это быть причиной этого.

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

transform[stdout]:
transform[stdout]: <--- Last few GCs --->
transform[stdout]:
transform[stdout]: [6180:0x102801000]   945611 ms: Mark-sweep 1410.8 (1546.2) -> 1410.8 (1530.2) MB, 5646.2 / 0.0 ms  (+ 0.0 ms in 0 steps since start of marking, biggest step 0.0 ms, walltime since start of marking 5646 ms) last resort GC in old space requested
transform[stdout]: [6180:0x102801000]   951930 ms: Mark-sweep 1410.8 (1530.2) -> 1410.8 (1530.2) MB, 6318.4 / 0.0 ms  last resort GC in old space requested
transform[stdout]:
transform[stdout]:
transform[stdout]: <--- JS stacktrace --->
transform[stdout]:
transform[stdout]: ==== JS stack trace =========================================
transform[stdout]:
transform[stdout]: Security context: 0xf7793325ee1 <JSObject>
transform[stdout]:     1: visit [/node_modules/@react-native-community/cli/node_modules/@babel/traverse/lib/path/context.js:~75] [pc=0x2945f0d9fcbf](this=0xf7789523021 <NodePath map = 0xf773909f479>)
transform[stdout]:     2: visitQueue [/node_modules/@react-native-community/cli/node_modules/@babel/traverse/lib/context.js:~96] [pc=0x2945f0d9d88d](this=0xf77b18e35c1 <...
transform[stdout]:
transform[stderr]: FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
transform[stderr]:  1: node::Abort() [/usr/local/bin/node]
transform[stderr]:  2: node::FatalException(v8::Isolate*, v8::Local<v8::Value>, v8::Local<v8::Message>) [/usr/local/bin/node]
transform[stderr]:  3:
transform[stderr]: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [/usr/local/bin/node]
transform[stderr]:  4:
transform[stderr]: v8::internal::Factory::NewStruct(v8::internal::InstanceType) [/usr/local/bin/node]
transform[stderr]:  5:
transform[stderr]: v8::internal::Factory::NewTuple3(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>) [/usr/local/bin/node]
transform[stderr]:  6:
transform[stderr]: v8::internal::LoadIC::UpdateCaches(v8::internal::LookupIterator*) [/usr/local/bin/node]
transform[stderr]:  7: v8::internal::LoadIC::Load(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Name>) [/usr/local/bin/node]
transform[stderr]:  8:
transform[stderr]: v8::internal::KeyedLoadIC::Load(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>) [/usr/local/bin/node]
transform[stderr]:  9:
transform[stderr]: v8::internal::Runtime_KeyedLoadIC_Miss(int, v8::internal::Object**, v8::internal::Isolate*) [/usr/local/bin/node]
transform[stderr]: 10: 0x2945f0b8463d

person cglacet    schedule 31.03.2019    source источник


Ответы (2)


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

  1. сброс кеша (реактивный запуск --reset-cache.)
  2. пытаясь удалить некоторые пакеты и файлы.
  3. удалите node_modules и package-lock.json, а затем попробуйте установить npm

но я, наконец, понял, как увеличить max_old_space_size. (Я разрабатывал приложение для Android). меня устраивает.

Что такое max_old_space_size?

React Native должен запустить сервер Node для преобразования файлов javascript во что-то другое. После, там много места для хранения вещей, не так ли? Да, и размер этого места определяется с помощью… нашего друга: «max_old_space_size». Давайте разберемся как можно проще. Если размер слишком мал, нам не хватает места для дыхания, и мы умираем. Наш Node-сервер ведет себя так же.

Как увеличить max_old_space_size

1. Добавьте следующие строки в массив project.ext.react файла build.Gradle, который находится в папке вашего приложения (Android-›App-›build.Gradle)

entryFile:"index.js", nodeExecutableAndArgs:["node","--max-old-space-size=8192"

Итак, теперь project.ext.react должен выглядеть так:

project.ext.react = [ entryFile:"index.js", nodeExecutableAndArgs:["node","--max-old-space-size=8192"] ]

Теперь у вас есть сервер Node, работающий с размером пространства 8 ГБ. Вы можете заменить номер «8192» на любой номер, который вам нравится.

Примечание. Увеличение max_old_space_size может решить проблему. Тем не менее, мы должны обратить внимание на оперативную память нашего ноутбука или настольного компьютера, прежде чем увеличивать ее. Если у вас 16 ГБ ОЗУ, размер пространства 8 ГБ будет безопасным. Если у вас 8 ГБ ОЗУ, используйте нижнее пространство для безопасности.

2. Удалите node_modules и установите npm.

проверьте эту ссылку для получения более подробной информации.

Заранее спасибо!

person Rashmika Lakshan    schedule 23.12.2020

Во-первых, устраните возможные ошибки, связанные с зависимостями, и отреагируйте на собственную конфигурацию.

Убедитесь, что вы не получили никаких ошибок на сервере при изменении кода в index.android.js. /index.ios.js

Убедитесь, что порт, который вы хотите применить, не заблокирован другими процессами.

  • Попробуйте закрыть сервер.
  • запустить реактивный запуск --reset-cache
  • перезагрузите приложение.
person Raju yourPepe    schedule 31.03.2019
comment
Где я должен увидеть эти журналы ошибок? У меня нет ошибки в моем терминале. В противном случае я уже пробовал все эти предложения. - person cglacet; 31.03.2019
comment
Предположим, вы используете mac lsof -i :X для проверки . где X - номер порта - person Raju yourPepe; 31.03.2019
comment
Нет, я имею в виду следующее: вы не получили никакой ошибки на сервере при изменении кода в index.android.js. /index.ios.js. Я обновил свой вопрос, добавив немного больше деталей, мне удалось найти ошибку при сборке из xcode. - person cglacet; 31.03.2019