Vue运行、打包内存溢出问题:FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
这个错误表明你的Node.js进程遇到了堆内存不足的问题(FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
),导致进程崩溃。具体来说,这是一个由fork-ts-checker-webpack-plugin
插件引发的错误,该插件在执行TypeScript类型检查时耗尽了内存。
解决方案一
1. 增加Node.js的堆内存限制
默认情况下,Node.js的堆内存限制较低(通常为1.4GB左右)。你可以通过以下方式增加内存限制:
-
方法1:在启动命令中指定内存限制
node --max-old-space-size=4096 your-script.js
例如,如果你使用的是
webpack
或yarn
,可以这样修改:NODE_OPTIONS=\"--max-old-space-size=4096\" yarn build
或(Windows PowerShell):
$env:NODE_OPTIONS=\"--max-old-space-size=4096\"; yarn build
-
方法2:在环境变量中永久设置
- Linux/macOS:
export NODE_OPTIONS=\"--max-old-space-size=4096\"
- Windows:
在系统环境变量中添加NODE_OPTIONS
,值为--max-old-space-size=4096
。
- Linux/macOS:
建议值:4096(4GB)或更高(如8192),根据你的项目复杂度调整。
2. 优化fork-ts-checker-webpack-plugin
配置
如果增加内存后仍然崩溃,可能是TypeScript类型检查任务过于繁重。尝试以下优化:
- 减少并行检查的线程数:
在webpack.config.js
中配置插件:const ForkTsCheckerWebpackPlugin = require(\'fork-ts-checker-webpack-plugin\');module.exports = { // ...其他配置 plugins: [ new ForkTsCheckerWebpackPlugin({ typescript: { async: true, // 异步检查(减少主线程阻塞) workers: 2, // 减少工作线程数(默认是CPU核心数) memoryLimit: 10240, // 限制内存使用(默认是4096) //关闭某些检查(如果不需要) diagnosticOptions: { syntactic: false, // 关闭语法错误检查 semantic: true, // false时关闭语义错误检查(谨慎使用) }, }, }), ],};
解决方案二
-
方法1:全局安装 npm install -g increase-memory-limit
在项目根目录下执行如下命令 increase-memory-limit
在package.json中添加:
\"scripts\": { \"fix-memory-limit\": \"cross-env LIMIT=4096 increase-memory-limit\"}
并运行
npm run fix-memory-limit
3. 检查项目中的内存泄漏
- 分析内存使用:
使用node --inspect
调试,或通过工具如heapdump
生成内存快照分析。 - 优化代码:
- 避免在循环中创建大量对象。
- 及时释放不再需要的引用(如事件监听器、定时器)。
验证是否解决
- 重新运行构建命令(如
yarn build
)。 - 如果不再出现
heap out of memory
错误,则问题已解决。
希望这些步骤能帮你解决问题!