错误
项目用的是react
,修改完的部分代码之后输入命令npm run build
报错内存溢出。
Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
网上查了一下解决方案,记录一下。主要参考了基于node的前端项目编译时内存溢出问题。
解决
错误说的是是JavaScript
堆内存不足,这里说的 JavaScript
其实就是 Node
,在 Node
中通过 JavaScript
使用内存时只能使用部分内存(64位系统下约为1.4 GB,32位系统下约为0.7 GB),这就是我们编译项目时为什么会出现内存泄露了,因为前端项目如果非常的庞大,webpack
编译时就会占用很多的系统资源,如果超出了V8对 Node
默认的内存限制大小就会出现刚刚我截图的那个错误了,V8依然提供了选项让我们使用更多的内存。Node
在启动时可以传递 --max-old-space-size
或 --max-new-space-size
来调整内存大小的使用限制。react
如果是自己搭建的开发包环境的话,直接再node
后边加上--max_old_space_size=4096
1 | "build": "node --max_old_space_size=4096 build/build.js" |
但是如果是基于react-cli
生成的项目的话,在package.json
中scripts
中内容一般是
1 | "scripts": { |
也就是说我们的npm run build
命令其实是运行的脚本react-scripts build
,这个脚本实际上是在node_models/.bin/react-scripts
中,这个文件的首行代码是 #!/ussr/bin/env node
,意思是使用当前电脑/usr/bin/env
目录下的node
来运行该文件中的javascript
代码,所以我们可以把--max_old_space_size=4096
这一行代码写在#!/usr/bin/env node
后边,#!/usr/bin/env node --max_old_space_size=4096
。
然而不起作用,我再次运行npm run build
命令的时候甚至没有进入build过程,就一直停止下来了。
1 | > xxxxt@xxx build /www/xxxx/xxxx |
一怒之下我将之前添加的命令去掉,直接reboot
,然后就解决了。重启操作可靠啊。
因为重启之后问题不能复现,所以还不能确定是什么导致的,因该之前的命令输入的有问题。这个等之后再细看。