npm构建给出“堆限制附近分配无效标记无效”

时间:2019-05-29 06:07:46

标签: node.js reactjs typescript npm

我有一个在Windows 10上运行的reactjs / typescript项目。我试图用ts-scripts构建

  

“ rimraf ../wwwroot/* && react-scripts-ts构建&&复制文件   ./build/**/* ../wwwroot/ -u 1

这以前工作正常,但是当我删除了node_modules-folder时,重新运行npm install-command,然后运行上面的命令,我得到了错误消息

  

致命错误:接近堆限制分配的无效标记压缩   失败-JavaScript堆内存不足

我不知道为什么。在我看过谷歌之后

  

NODE_OPTIONS =“ – max-old-space-size = 2048”   但我不知道该放在哪里

完整的错误消息

前几个GC

[11376:0000024682F49880]    60039 ms: Mark-sweep 2034.1 (2085.2) -> 2033.7 (2085.2) MB, 1029.4 / 0.0 ms  (average mu = 0.073, current mu = 0.006) allocation failure scavenge might not succeed
[11376:0000024682F49880]    61094 ms: Mark-sweep 2034.4 (2085.2) -> 2034.1 (2085.7) MB, 1047.7 / 0.0 ms  (average mu = 0.039, current mu = 0.007) allocation failure scavenge might not succeed


 JS stacktrace 
==== JS stack trace =========================================

    0: ExitFrame [pc: 000001CDF84DC5C1]
Security context: 0x007044b9e6e1 <JSObject>
    1: bindChildrenWorker(aka bindChildrenWorker) [000001AD1C0ACD59] [C:\Users\robcar\source\repos\Boost\Boost.Web\ClientApp\node_modules\typescript\lib\typescript.js:~27657] [pc=000001CDF8FA47CA](this=0x03da79d826f1 <undefined>,node=0x034b8724ab71 <NodeObject map = 000000660468F931>)
    2: bind(aka bind) [000001AD1C0AE2D9] [C:\Users\robcar\source\repos\B...

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 00007FF6B5EA121A v8::internal::GCIdleTimeHandler::GCIdleTimeHandler+4810
 2: 00007FF6B5E7A5B6 node::MakeCallback+4518
 3: 00007FF6B5E7AFA0 node_module_register+2160
 4: 00007FF6B610B3EE v8::internal::FatalProcessOutOfMemory+846
 5: 00007FF6B610B31F v8::internal::FatalProcessOutOfMemory+639
 6: 00007FF6B6649304 v8::internal::Heap::MaxHeapGrowingFactor+11476
 7: 00007FF6B663FA67 v8::internal::ScavengeJob::operator=+25543
 8: 00007FF6B663DFDC v8::internal::ScavengeJob::operator=+18748
 9: 00007FF6B6646F57 v8::internal::Heap::MaxHeapGrowingFactor+2343
10: 00007FF6B6646FD6 v8::internal::Heap::MaxHeapGrowingFactor+2470
11: 00007FF6B61E9DD7 v8::internal::Factory::NewFillerObject+55
12: 00007FF6B6281ABA v8::internal::WasmJs::Install+29530
13: 000001CDF84DC5C1

8 个答案:

答案 0 :(得分:15)

我使用的解决方案是将节点js版本从 v10 升级到 v12


命令export NODE_OPTIONS=--max_old_space_size=4096有效,但是有一些限制,例如您应该在计算机上有足够的内存来运行生产版本。

答案 1 :(得分:2)

问题的根本原因是源文件过大。

您可以分两步解决问题。

  1. 首先尝试增加空间大小并检查应用程序。如果问题是由您的源代码引起的,则可以通过如下所示增加节点堆大小来解决此问题,
"start": "react-scripts --max_old_space_size=4096 start",
"build": "react-scripts --max_old_space_size=4096 build"
  1. 第二步是设置环境变量。 如果问题出在您的依赖项内,您可能需要全局增加节点堆分配来解决问题。
    对于 Windows:set NODE_OPTIONS=--max_old_space_size=4096
    对于 Linux:export NODE_OPTIONS=--max_old_space_size=4096

另请注意,如果您使用的是非常低的内存,例如 512MB,那么您必须将其升级到至少 2GB 以获得更好的结果。

这里我使用了 4096MB = 4GB 大小,但您可以根据您的机器配置(特别是 RAM)更改此大小。您可以将其设置为 2GB 或 1GB 并检查应用程序。

答案 2 :(得分:1)

尽管在Mac计算机上,我也遇到类似的问题。 对我来说,诀窍是设置环境变量。这样,您的节点进程将获取该值并独立于所运行的脚本来使用它。

export NODE_OPTIONS =-max_old_space_size = 4096

再次运行命令。祝你好运!

答案 3 :(得分:1)

我认为解决方案不是增加内存限制。这样,问题总是会被推迟。

我已经两次遇到此问题。我已经解决了,每次:

  1. 使用特定版本的nodev12.11.1react v16.13.1react-scripts v3.2.0);
  2. npm切换到yarnnode v12.11.1react v16.13.1react-scripts v3.4.1)。

此外,检查您的package.json,删除package-lock.json,删除node-modules文件夹,然后尝试重新安装依赖项。

接下来尝试构建您的项目。

答案 4 :(得分:1)

增加节点max_old_space后得到修复。解决方法是这里。

代替运行npm start或ng start。运行以下命令

node --max_old_space_size = 8048 ./node_modules/@angular/cli/bin/ng服务

OR

您也可以在package.json文件中添加命令

“开始”:“ node --max_old_space_size = 8048 ./node_modules/@angular/cli/bin/ng服务”

答案 5 :(得分:0)

我在Windows上遇到了同样的问题。解决方案是在运行npm run build之前设置NODE_OPTIONS变量。要设置此变量,只需运行set NODE_OPTIONS=--max_old_space_size=8192

答案 6 :(得分:0)

我已经面对这个问题已有一段时间了。该问题很可能是由依赖项或较大的.js文件组件引起的。我目前正在使用this package来成功解决此问题。

您基本上是在全局安装的:

npm install -g increase-memory-limit

然后从项目根目录中运行:

increase-memory-limit

这会将--max-old-space-size=4096附加到node_modules/.bin/*文件内的所有节点调用中。

答案 7 :(得分:0)

这是我在 package.json 运行命令中写的

<块引用>

“脚本”:{ "build": "node --max_old_space_size=4096 build/build.js" }

基本上,您必须在实际构建命令之前运行 --max_old_space_size=4096