webpack打包报错:FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
webpack打包多入口,大项目时,有时候会报内存溢出的错误(FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory),可采用以下步骤来解决问题:
1. 定位问题
可在打包脚本中,加入以下代码,实时监控内存占用情况
process.memoryUsage()
返回值为:
{
rss: 4935680,
heapTotal: 1826816,
heapUsed: 650472,
external: 49879,
arrayBuffers: 9386
}
单位是字节
heapTotal和heapUsed代表V8的内存使用情况。external代表V8管理的,绑定到Javascript的C++对象的内存使用情况。rss是驻留集大小, 是给这个进程分配了多少物理内存(占总分配内存的一部分),包含所有的C++和JavaScript对象与代码。arrayBuffers指分配给ArrayBuffer和SharedArrayBuffer的内存,包括所有的Node.js Buffer。 这也包含在external值5. 中。 当Node.js用作嵌入式库时,此值可能为0,因为在这种情况下可能无法跟踪ArrayBuffer的分配。
2. 解决问题
查看到webpack所需要的大致内存后,将nodejs可用内存调整至其需要的大小,可通多以下几种方式调整:
2.1 nodejs执行相关脚本,直接添加--max-old-space-size参数
node --max-old-space-size=8192 index.js
2.2 如果是通过gulp等处理的打包
找到node_modules/.bin/gulp文件,第一行会为#!/usr/bin/env node,在node后面新增--max-old-space-size xxx就好,
比如:
#!/usr/bin/env node --max_old_space_size=8192 // 8192为MB,可修改为自己需要的大小。
2.3 通过设置全局变量解决
# windows
set NODE_OPTIONS=--max_old_space_size=4096
# mac/linux
export NODE_OPTIONS=--max_old_space_size=4096
2.4 选择npm库increase-memory-limit
但是作者更推荐使用方式2.3
以上4种方式,都可解决内存溢出问题,可按照相关项目实际情况,选择合适的方式.
浙公网安备 33010602011771号