npm 构建提供"Ineffective mark-compacts near heap limit Allocation failed"



我有一个在Windows 10上运行的reactjs/typescript项目。我试图通过 ts 脚本构建

"里拉夫../wwwroot/* && react-scripts-ts build && copyfiles 。/建/**/*。。/wwwroot/-u 1

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

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

我不知道为什么。谷歌搜索后我看到了

NODE_OPTIONS="–最大旧空间大小=2048" 但我不知道把这个放在哪里

完整的错误消息

最后几个指导性案例

[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:UsersrobcarsourcereposBoostBoost.WebClientAppnode_modulestypescriptlibtypescript.js:~27657] [pc=000001CDF8FA47CA](this=0x03da79d826f1 <undefined>,node=0x034b8724ab71 <NodeObject map = 000000660468F931>)
    2: bind(aka bind) [000001AD1C0AE2D9] [C:UsersrobcarsourcereposB...
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

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

export NODE_OPTIONS=--max_old_space_size=4096

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

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


该命令export NODE_OPTIONS=--max_old_space_size=4096工作,但有限制,例如,您的机器上应该有足够的内存来运行生产版本。

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

我在增加节点max_old_space后得到了修复。这是修复程序。

而不是运行 npm start 或 ng start。运行以下命令

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

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

"start": "node --max_old_space_size=8048 ./node_modules/@angular/cli/bin/ng serve"

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

您可以通过 2 个步骤解决问题。

  1. 首先尝试增加空间大小并检查应用程序。如果问题是由源代码引起的,则可以通过增加节点堆大小来解决,如下所示,
"start": "react-scripts --max_old_space_size=4096 start",
"build": "react-scripts --max_old_space_size=4096 build"
  1. 第二步是设置环境变量。如果问题出在您的依赖项中,您可能需要全局增加节点堆分配才能解决问题><。对于窗口: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. 使用特定版本的node(v12.11.1react v16.13.1react-scripts v3.2.0(;
  2. npm切换到yarn(node v12.11.1react v16.13.1react-scripts v3.4.1(。

此外,请检查您的package.json,删除package-lock.json,删除node-modules文件夹并尝试再次安装依赖项。

接下来尝试生成项目。

这是我

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

"脚本":{"构建": "节点 --max_old_space_size=4096 构建/构建.js"}

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

我也一直在Nuxt.js环境中努力解决这个问题。

正如大家在这里所说,用提供大量--max_old_space_size={size}似乎对我有用。但是,由于我对Nuxt.js应用程序堆栈进行了一些额外的修复,因此相同的症状再次出现......

此外,我还尝试了Node.js选项--heapsnapshot-near-heap-limit={number}它似乎有效,而不是持久。

无论如何,除了通过这里或其他地方搜索另一个修复程序外,我还打算进行电源线审查,以便我可以预期我们的应用程序堆栈中是否有多余的内容。

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

您基本上将其全局安装:

npm install -g increase-memory-limit

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

increase-memory-limit

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

最新更新