response-native - FATAL ERROR: неэффективные сжатые метки вблизи предела кучи Выделение не удалось - куча JavaScript не хватает памяти

Я борюсь с React Native а также aws-sdk, Причина я использую aws-sdk вместо aws-amplify это потому что:

aws-ampify не поддерживает использование предварительно подписанного URL для загрузки файла

Мой проект работает нормально, пока aws-sdk устанавливается npm а также aws-sdk-react-native импортируется (этот файл 4,3 МБ, когда aws-sdk версия "2.369.0").

После добавления этой строки кода:

const AWS = require("aws-sdk/dist/aws-sdk-react-native");

Приложение вылетает с сообщением об ошибке:

transform[stdout]: <--- Last few GCs --->
transform[stdout]:
transform[stdout]: [5433:0x103800000]    59176 ms: Mark-sweep 1256.2 (1442.0) -> 1236.2 (1434.5) MB, 3855.9 / 0.0 ms  (average mu = 0.239, current mu = 0.130) allocation failure scavenge might not succeed
transform[stdout]: [5433:0x103800000]    63390 ms: Mark-sweep 1259.8 (1442.5) -> 1243.1 (1438.5) MB, 3924.9 / 0.0 ms  (average mu = 0.161, current mu = 0.069) allocation failure scavenge might not succeed
transform[stdout]:
transform[stdout]:
transform[stdout]: <--- JS stacktrace --->
transform[stdout]:
transform[stdout]: ==== JS stack trace =========================================
transform[stdout]:
transform[stdout]:     0: ExitFrame [pc: 0x1e49a5a5be3d]
transform[stdout]: Security context: 0x21d5cac9e6e1 <JSObject>
transform[stdout]:     1: queue [0x21d5c3f5fc09] [/Users/yumac/Projects/ReactNative/Demo/OutOfMemory/node_modules/@babel/generator/lib/buffer.js:~88] [pc=0x1e49a5f9825e](this=0x21d55e682309 <Buffer map = 0x21d51ca6ba29>,str=0x21d577355491 <String[12]:             >)
transform[stdout]:     2: StringLiteral [0x21d5c3f07491] [/Users/yumac/Projects/ReactNative/Demo/OutOfMemory/node_modules/@babel/ge...
transform[stdout]:
transform[stderr]: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
transform[stderr]:  1: 0x10003ae75 node::Abort() [/usr/local/bin/node]
transform[stderr]:  2: 0x10003b07f node::OnFatalError(char const*, char const*) [/usr/local/bin/node]
transform[stderr]:  3: 0x1001a7ae5 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/usr/local/bin/node]
transform[stderr]:  4: 0x100572ef2 v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/usr/local/bin/node]
transform[stderr]:  5: 0x1005759c5 v8::internal::Heap::CheckIneffectiveMarkCompact(unsigned long, double) [/usr/local/bin/node]
transform[stderr]:  6: 0x10057186f v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/usr/local/bin/node]
transform[stderr]:  7: 0x10056fa44 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/usr/local/bin/node]
transform[stderr]:  8: 0x10057c2dc v8::internal::Heap::AllocateRawWithLigthRetry(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/usr/local/bin/node]
transform[stderr]:  9: 0x10057c35f v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/usr/local/bin/node]
transform[stderr]: 10: 0x10054bca4 v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [/usr/local/bin/node]
transform[stderr]: 11: 0x1007d3b54 v8::internal::Runtime_AllocateInNewSpace(int, v8::internal::Object**, v8::internal::Isolate*) [/usr/local/bin/node]
transform[stderr]: 12: 0x1e49a5a5be3d
transform[stderr]: 13: 0x1e49a5f9825e
transform[stderr]: 14: 0x1e49a5f84e0f
transform[stderr]: 15: 0x1e49a5a0a5c3
transform[stderr]: 16: 0x1e49a5ee8a79 

Я пробую много решений, таких как:

увеличение-памяти предел

узел --max-old-space-size=8192 index.js

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

Если у вас есть какие-либо предложения, я всегда готов услышать от вас.

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

2 ответа

Я могу запустить отладку, изменив package.json чтобы:

"scripts": {
    ...
  "start-max": "node --max-old-space-size=8192 node_modules/react-native/local-cli/cli.js start",
    ...
},

При запуске терминала: "npm run start-max", чтобы запустить сервер узла с 8 192 МБ. Затем запустите ваш проект как обычно: "response-native run-android".

Выпуск Android:

В файле build.gradle приложения добавьте эту строку

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

Наслаждайтесь!

Дополнение ответа @LuongTruong исправлениями iOS.

Выпуск iOS:

Перейдите в (XCode Workspace -> Project -> Build Phases -> Bundle React Native code and images)

У команды должны быть эти три строки вверху

      export NODE_BINARY=node
export NODE_ARGS=--max-old-space-size=8192
export NODE_OPTIONS=--max-old-space-size=8192

Ссылка на https://sandny.com/2019/12/30/react-native-heap-limit-allocation-failed/

Другие вопросы по тегам