4.1 KiB
4.1 KiB
编译器内存溢出解决方案
问题描述
编译时出现 FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
错误,表示 Node.js 内存不足。
解决方案
方案一:增加 Node.js 内存限制(推荐)
在 HBuilderX 中设置
-
修改 HBuilderX 配置文件
- 关闭 HBuilderX
- 找到 HBuilderX 安装目录
- 打开
HBuilderX\plugins\node\node_modules\@dcloudio\vite-plugin-uni\dist
目录 - 或者在项目根目录创建
vue.config.js
文件
-
创建或修改项目根目录下的
vue.config.js
module.exports = { transpileDependencies: [], // 增加 Node.js 内存限制 configureWebpack: { devServer: { disableHostCheck: true } } }
-
修改 HBuilderX 启动配置
- 找到 HBuilderX 安装目录
- 编辑
HBuilderX.exe
的启动参数 - 创建一个批处理文件
start-hbuilderx.bat
:
@echo off set NODE_OPTIONS=--max-old-space-size=8192 start "" "HBuilderX安装路径\HBuilderX.exe"
- 将内存设置为 8GB(8192MB),可根据实际情况调整为 4096、8192 或更大
在命令行中运行(如果使用 CLI)
如果您使用命令行方式编译,可以设置环境变量:
Windows PowerShell:
$env:NODE_OPTIONS="--max-old-space-size=8192"
Windows CMD:
set NODE_OPTIONS=--max-old-space-size=8192
永久设置(Windows 系统环境变量):
- 右键"此电脑" → "属性" → "高级系统设置" → "环境变量"
- 在"用户变量"或"系统变量"中新建变量:
- 变量名:
NODE_OPTIONS
- 变量值:
--max-old-space-size=8192
- 变量名:
- 重启 HBuilderX
方案二:清理缓存
-
清理 HBuilderX 缓存
- 在 HBuilderX 中:运行 → 清理项目缓存
- 或者手动删除
unpackage
目录
-
删除 node_modules 并重新安装
Remove-Item -Recurse -Force node_modules # 如果有 package.json,重新安装依赖 npm install
方案三:优化项目
-
检查大文件
- 检查
static
目录下是否有过大的图片或资源文件 - 当前项目中有 85 个 icon 图片,建议:
- 压缩图片文件
- 使用雪碧图或字体图标代替多个小图标
- 将不常用的资源移到云存储
- 检查
-
检查第三方库
- 检查
lib
目录中的第三方库是否必需 - 当前已引入的库:
- dompurify@3.2.4es.js
- markdown-it.min.js
- highlight-uni.min.js
- lunar-javascript@1.7.2.js
- string-similarity.min.js
- 考虑按需引入或延迟加载
- 检查
-
优化编译配置 在
manifest.json
中的h5.optimization
已启用treeShaking
,这很好。 -
分包加载
- 已使用
packageA
分包,继续保持 - 考虑将更多页面移到分包中
- 已使用
方案四:升级 HBuilderX
确保使用最新版本的 HBuilderX,新版本通常有更好的内存管理。
推荐操作步骤
- 立即执行: 设置
NODE_OPTIONS
环境变量为--max-old-space-size=8192
- 清理缓存: 在 HBuilderX 中清理项目缓存
- 重启 HBuilderX: 使用新的环境变量启动
- 长期优化: 压缩静态资源,优化第三方库引入
验证
设置完成后,重新编译项目,查看是否还会出现内存溢出错误。
参考资料
- uni-app 官方文档 - 内存溢出问题
- Node.js 内存限制说明:
- 默认限制:约 1.4GB(32位)或 1.7GB(64位)
- 建议设置:4096MB(4GB)或 8192MB(8GB)
- 最大可设置:取决于系统可用内存
常见问题
Q: 设置后仍然内存溢出?
A: 尝试增大内存限制值,如 --max-old-space-size=16384
(16GB)
Q: 如何检查当前 Node.js 内存限制?
A: 在命令行运行:node -e "console.log(require('v8').getHeapStatistics().heap_size_limit/(1024*1024))"
Q: 编译特别慢? A: 内存充足但编译慢,可能是 CPU 性能问题,考虑:
- 关闭不必要的后台程序
- 使用 SSD 硬盘
- 升级硬件配置