记录一次vue-cli打包内存溢出问题处理

2,891 阅读2分钟

先上报错截图

519fb3dab5967a27fefe255405a368e.png FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory node基于v8引擎在64位系统上大小1.4g左右 列举下以下方案

1 、 在package.json中直接传参

我的脚手架版本是"@vue/cli-service": "^3.8.0", scrips:{"build": "vue-cli-service build --max_old_space_size=8192",} 结果没区别 可能是因为项目用的vue脚手架 在这里直接传参无效 如果直接node起服务应该这样是可以的

2 、使用插件

有个插件叫increase-memory-limit可以增加内存限制

第一步全局安装

npm install -g increase-memory-limit

第二步 在项目根目录位置运行

ncrease-memory-limit

结果打包报错

image.png 根据这个报错我找到了是在node_modules.bin\vue-cli-service.cmd这个位置主要是改动的prog传参来调整node内存限制 10240绝对够用了

image.png 这个是引号位置问题 试着改成这样就好了

image.png 再执行下npm run build 完美解决; 如果是偶尔需要增大限制 也可以自己去这个文件下面手动添加这参数 没必要用这个插件 多人开发需要且不报错的话用官方文档fix-memory-limit配置还是挺方便的

image.png

接着顺带了解下node依赖包里的cmd文件和bin文件是干啥的吧

.cmd为连接器命令文件:给出了程序空间和数据空间的设置,及编译后各程序段在程序或数据空间的具体位置。MEMORY[伪指令]定义一个目标系统的存储器映像图,用户可以给存储器各部分命名,指定它们的起始地址和长度。SECTIONS伪指令告诉连接器怎样把输入段组合成输出段,以及把输出段放在存储器的什么位置。用户可以通过编写链接命令文件(cmd 文件)将链接信息放在一个文件中,以便在多 次使用同样的链接信息时调用

.bin文件 npm 在执行install的时候,会根据三方库中的package.json里面的bin配置,在node_modules下面的.bin目录生成一个可执行文件,生成的可执行文件其实是一个替身文件,那么这个替身文件真正指向的就是package.json里面的bin配置里面的那个文件.

3、set命令配置环境变量

# windows
cmd中执行 `set NODE_OPTIONS=--max-old-space-size=8192`(当本窗口关闭后,该配置失效)
或者
在环境变量窗口中编辑系统级别的环境变量。新增配置:
name: `NODE_OPTIONS`
value: `--max-old-space-size=8192`
# mac/linux
export NODE_OPTIONS=--max_old_space_size=4096

还有个插件叫corss-env 使您可以拥有一个命令,而无需担心为平台正确设置或使用环境变量。就像在 POSIX 系统上运行时一样设置它,并且cross-env会正确设置它。

over!

参考链接:

链接1

链接2