webpack 打包时内存溢出
报错信息:chunk assetsFATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
翻译过来就是JavaScript堆内存不足,而这里的 JavaScript 其实就是 Node。在其他的后端开发语言中,在内存的使用上没有什么限制。而Node不同,查了资料后发现:由于Node是基于 V8 引擎,在Node中通过JavaScript使用内存时只能使用部分内存(64 位系统下约为 1.4 GB,32 位系统下约为 0.7 GB),这就是编译项目时为什么会出现内存泄露了。
项目如果非常的庞大,webpack编译时就会占用很多的系统资源,如果超出了 V8 对Node默认的内存限制大小就会出现刚刚内存溢出的错误。
事实上 V8 依然提供了选项来允许使用更多的内存。Node在启动时可以传递--max-old-space-size或--max-new-space-size来调整内存大小的使用限制。
如果遇到Node无法分配足够内存给JavaScript的情况,可以用这个办法来放宽 V8 默认的内存限制,避免在执行过程中稍微多用了一些内存就出现崩溃的情况。
有两种解决方案:
- 打开 node_modules.bin\webpack-dev-server.cmd 文件,添加
--max_old_space_size=32768
1 | @IF EXIST "%~dp0\node.exe" ( |
- 在 package.json 中给 build 命令增加参数(修改后需要 npm i):
1 | "scripts": { |