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