pnpm build打包时占内溢出

这两天在打包H5网页的时候失败,总是提示下方错误

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

严重错误:堆限制附近标记压缩无效分配失败 - JavaScript 堆内存不足

尝试了多种方法,有一种方式是直接命令行设置的,还有直接在package.json文件的build前面加命令的,但是没有效果,下方的解决方法亲测有效。

复制代码
rendering chunks (4)...
<--- Last few GCs --->

[8676:000001FAEAF60F70]   101479 ms: Mark-sweep (reduce) 2036.2 (2083.2) -> 2034.8 (2082.1) MB, 3196.4 / 0.2 ms  (average mu = 0.247, current mu = 0.162) allocation failure GC in old space requested
[8676:000001FAEAF60F70]   103959 ms: Mark-sweep (reduce) 2035.3 (2082.4) -> 2035.3 (2082.4) MB, 2478.4 / 0.0 ms  (average mu = 0.147, current mu = 0.001) allocation failure GC in old space requested


<--- JS stacktrace --->

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 00007FF67AF3B34F v8::internal::CodeObjectRegistry::~CodeObjectRegistry+123599
 2: 00007FF67AEC8CB6 v8::internal::MicrotaskQueue::GetMicrotasksScopeDepth+65206
 3: 00007FF67AEC9D8D node::OnFatalError+301
 4: 00007FF67B7FC36E v8::Isolate::ReportExternalAllocationLimitReached+94
 5: 00007FF67B7E694D v8::SharedArrayBuffer::Externalize+781
 6: 00007FF67B689F2C v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1468
 7: 00007FF67B696BD9 v8::internal::Heap::PublishPendingAllocations+1129
 8: 00007FF67B693BAA v8::internal::Heap::PageFlagsAreConsistent+2842
 9: 00007FF67B686809 v8::internal::Heap::CollectGarbage+2137
10: 00007FF67B6849C0 v8::internal::Heap::AllocateExternalBackingStore+2000
11: 00007FF67B6A9546 v8::internal::Factory::NewFillerObject+214
13: 00007FF67B88A061 v8::internal::SetupIsolateDelegate::SetupHeap+494417
14: 000001FAECEE4B52

现在下载increase-memory-limit 和 cross-env

复制代码
npm install cross-env increase-memory-limit

到package.json文件夹下添加配置如下:

复制代码
"fix-memory-limit": "cross-env LIMIT=8048 increase-memory-limit",

添加完配置之后,在项目目录下运行

复制代码
pnpm run fix-memory-limit

完成之后,直接打包或运行代码。

小计:没有很清楚造成这个nodejs的栈内存溢出的原因,就看到网上很多都是修改node的内存的,具体的解释就是在打包的时候数据没办法被释放,导致内存溢出。

不是很理解,一下是AI给的可能得原因:

复制代码
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 这个错误通常发生在 Node.js 应用程序或脚本在执行过程中耗尽了可用的 JavaScript 堆内存。在 Vue.js 或其他前端框架的打包过程中遇到这个错误,可能有以下几个原因:

内存限制: Node.js 在启动时默认分配的堆内存大小有限,对于64位系统,默认值通常是1.4GB左右。当构建过程中的 JavaScript 对象和数据结构占用的内存超过了这个限制,就会出现内存溢出。

复杂的构建任务: 构建工具如 Webpack 可能在处理大型项目或复杂配置时消耗大量内存。例如,解析大量的模块依赖、执行 babel 转译、压缩代码、处理样式资源等操作都可能消耗大量内存。

循环引用或泄漏: 如果构建过程中存在内存泄漏或者不正确的垃圾回收机制,会导致不再使用的对象无法被及时释放,从而逐渐消耗掉可用的内存。

插件或加载器问题: 某些构建插件或加载器可能在执行时消耗过多内存,尤其是当它们处理大文件或进行深度递归操作时。

并发构建: 如果同时运行多个构建任务,每个任务都会消耗内存,可能导致总内存消耗超出系统限制。

解决这个问题的方法包括:

增加内存限制: 可以通过增加 Node.js 启动时的最大堆内存来解决。例如,对于 Vue CLI 项目,可以在 package.json 中的脚本命令前添加 --max_old_space_size=<size> 参数,如 npm run build -- --max_old_space_size=4096,将最大堆内存设置为4GB。

优化构建配置: 审查并优化 Webpack 配置,移除不必要的插件或加载器,减少并行执行的任务数量,使用更高效的编译选项。

清理内存泄漏: 使用内存分析工具检查构建过程中是否存在内存泄漏,并修复相关问题。

升级构建工具: 升级到最新版本的构建工具和依赖包,新版本可能已经修复了一些已知的性能问题和内存消耗问题。

使用专用构建服务器: 如果本地机器经常遇到内存不足的问题,可以考虑使用具有更多内存的专用构建服务器来执行构建任务。
相关推荐
2601_9621773038 分钟前
Windows 安装 Codex CLI 入门级教程
人工智能·windows·node.js·ai编程
就叫年华吧丶5 小时前
长文档点目录定位总是不准?一个 content-visibility + 平滑滚动引发的连环坑(Vue3 实战)
前端·javascript·算法·vue
光影少年5 小时前
RN与Flutter架构区别
前端·flutter·react native·react.js·架构·node.js
梅孔立1 天前
Codex 完整教程(Node.js安装 + npm安装Codex + DeepSeek配置 + 快捷键 + 设置)
前端·npm·node.js
晚风醉蝶1 天前
webpack 模块提取
前端·webpack·node.js·ast·逆向分析
今年下半年2 天前
【VUE3】移动端:使用腾讯地图显示区域统计与放大显示资产点位
javascript·前端框架·vue·地图
志尊宝2 天前
Vue3 零基础每日笔记(054):Pinia 三件套详解——state / getters / actions 全搞懂
前端·javascript·vue.js·vue·前端开发
YIAN2 天前
从 SSE 流式到结构化输出:LangChain 三大 OutputParser 与 ToolCall 方案全实战
前端·langchain·node.js
濮水大叔2 天前
Cabloy全栈框架的两个SSR入口:Vona集成式SSR vs Zova独立式SSR
typescript·node.js·全栈
怕浪猫2 天前
DeepSeek Harness 系列图解
面试·前端框架·node.js