错误

项目用的是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.jsonscripts中内容一般是

1
2
3
4
5
6
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
}

也就是说我们的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
2
> xxxxt@xxx build /www/xxxx/xxxx
> react-scripts build

一怒之下我将之前添加的命令去掉,直接reboot,然后就解决了。重启操作可靠啊。

因为重启之后问题不能复现,所以还不能确定是什么导致的,因该之前的命令输入的有问题。这个等之后再细看。

相关文章
评论
分享
  • Asset render failed

    错误修改完配置文件后突然出现了错误 hexo s 查找错误查看styl文件后并没有发现什么问题_code_copy.styl 123456789101112.copy-nav { position: relat...

    Asset render failed
  • MySQL

    索引B+Tree 原理1. 数据结构2. 操作3. 与红黑树比较MySQL索引1. B+Tree 索引2. 哈希索引3. 全文索引4. 空间数据索引索引优化1. 独立的列2. 多列索引3. 索引列的顺序4. 前缀索引4. 覆盖索引索引...

    MySQL
  • 数据库

    事务概念事务指的是满足ACID特性的一组操作,可以通过Commit提交一个事务,也可以使用Rollback进行回滚 ACID1. 原子性(Atomicity)事务被视为不可分割的最小单元,事务的所有操作要么全部都提交成功,要么...

    数据库
  • Hello World

    Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using ...

    Hello World