我认为问题出在捆绑器缺少内存这一事实:
transform[stderr]: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [/usr/local/bin/node]
我发现a decent solution,而不是运行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
答案 0 :(得分:0)
在更改index.android.js中的代码时,请确保您没有在服务器中收到任何错误。 / index.ios.js
确保要应用react-native的端口未被其他进程阻止
答案 1 :(得分:0)
当分配的内存不够时可能会发生这种情况。我已经做了很多步骤来解决这个问题,这些步骤对我来说都是毫无价值的。其中一些是,
但我终于想出了如何增加 max_old_space_size。 (我一直在开发一个 android 应用程序)。它对我有用。
什么是 max_old_space_size?
React Native 必须启动一个 Node 服务器才能将 javascript 文件转换为其他文件。接下来,有很多地方可以存放东西,对吗?是的,那个地方的大小是使用......我们的朋友:“max_old_space_size”定义的。 让我们尽可能简单地理解它。如果尺寸太小,我们就没有足够的呼吸空间而死。我们的 Node 服务器也是如此。
如何增加 max_old_space_size
1. 将以下行添加到您的应用文件夹(Android->App->build.Gradle)中 build.Gradle 的“project.ext.react”数组中
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 服务器运行的空间大小为 8GB。您可以将数字“8192”替换为您喜欢的任何数字
注意 - 增加 max_old_space_size 可以解决问题。但是,在增加它之前,我们应该注意我们的笔记本电脑或台式机内存。如果您有 16GB RAM,8GB 空间大小将是安全的。如果您有 8GB RAM,请尝试使用较小的空间以确保安全。
2. 删除 node_modules 并给出“npm install”
查看此link了解更多详情。
提前致谢!