×

vite 编译报错:FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

2024-01-16 10:48:44 Falcon

这个错误信息是因为Node.js的堆内存耗尽了。Vite底层使用的是Rollup进行打包,而Rollup会将所有需要打包的文件一次性加载到内存中进行处理,对内存有较高的需求。在处理大型项目时,可能会出现内存不足的问题。

你可以通过以下两种方式尝试解决这个问题:

1. 增加Node.js的最大内存限制:

Node.js 默认的内存限制是 512MB,你可以手动提高它。在 package.json 文件中的 scripts 部分增加 --max-old-space-size 参数,例如:

"scripts": {
  "dev": "node --max-old-space-size=4096 node_modules/vite/bin/vite.js",
  "build": "node --max-old-space-size=4096 node_modules/vite/bin/vite.js build"
}

这里的 4096 是内存大小的限制,单位是MB。你可以根据你的系统内存情况进行调整。

2. 优化你的代码和项目结构:

  • 对于不需要在浏览器中运行的代码,例如后端代码、测试代码等,从打包过程中排除掉。
  • 把一些公共代码或大型库提取为外部依赖,这样可以分块构建,降低内存使用。
  • 检查项目中是否有不必要的大文件或者无法处理的文件格式。

这两种方法都是在不同层面上解决问题:方法1是通过调整配置解决,方法2是从源头上改进代码,优化项目。你可以根据实际情况采取适当的方法。另外,此类问题也可以向Vite社区反馈以寻求帮助。

本文收录于