vue项目编译提示内存溢出

前段时间公司有个基于vue的项目在运行npm run build的时候会报内存溢出,今天在某个技术流交群也有位小伙伴基于angular的项目也出现了这个问题,所以查了一些相关的资料总结了一下,下面会详细说明前端三大框架编译时遇到这个问题具体怎么解决。首先看我模拟出的报错内容

具体截图如下

里面有句关键的话,CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory JavaScript堆内存不足,这里说的 JavaScript 其实就是 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 --max-old-space-size=1700 test.js // 单位为MB
// 或者
node --max-new-space-size=1024 test.js // 单位为KB

上述参数在V8初始化时生效,一旦生效就不能再动态改变。如果遇到 Node 无法分配足够内存给 JavaScript 的情况,可以用这个办法来放宽V8默认的内存限制,避免在执行过程中稍微多用了一些内存就轻易崩溃,既然知道了解决办法那就好办了,下面来分别详细说明三大框架下的具体操作。

Vue

先说vue,因为vue是最简单的,因为基于 vue-cli 生成的项目,vue没有把 package.json 里面 scripts 字段的脚本命令的node命令隐藏起来,我们直接把上面v8提供的选项参数直接写入scripts 字段的 node 命令后就好了,示例如下

"build": "node --max_old_space_size=4096 build/build.js"

直接在 node 后面写上 --max_old_space_size=4096 就好了,我这里设置的内存大小是4G,这个具体的大小可以根据自己的项目情况来设置就好了。然后再重新运行 npm run build 就可以正常打包构建了。

React

下面来说说 react ,首先如果自己的 react 项目的开发打包环境是自己搭建的话,那解决方法就和上面的 vue 一样,在 node 命令后面加上 --max_old_space_size=4096 就好了,如果是基于 react-cli 生成的项目那就接着看吧,基于react-cli 生成的项目我们发现package.json 里面 scripts 字段的内容如下

[js] view plain copy

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

这个就和 vue-cli 不一样了,运行npm run build的时候跑的实际代码是 react-scripts build, 这个脚本是来源于哪里呢,我们打开项目根目录mode_modeles文件夹,会看到一个.bin的目录,react-scripts脚本就定义在这里,在.bin目录下可以找到一个叫react-scripts的文件,打开这个文件,我们发现里面就是一些javascript代码,这个代码的首行有些特殊,我们可以看到#!/usr/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,这样就好了,我们的内存溢出问题也就解决了。

Angular

最后开始说 angular ,当然这里说的 angular 是 angular 的最新版本不是angularjs,写angular应用我们一般也都会用angular-cli来搭建项目,如果是自己搭建的开发编译那解决办法和上面的vue是一样的了。用angular-cli来生成的项目也和react一样,cli把node命令也隐藏起来了,package.json 里面 scripts 字段的内容如下

[js] view plain copy

  1. "scripts": {
  2. "ng": "ng",
  3. "start": "ng serve",
  4. "build": "ng build",
  5. "test": "ng test",
  6. "lint": "ng lint",
  7. "e2e": "ng e2e"
  8. }

这里的ng命令也和react一样,定义在项目根目录mode_modeles文件夹下的.bin目录里面,.bin目录下我们能找到一个叫ng的文件,在该文件的首行写上#!/usr/bin/env node --max_old_space_size=4096,这样也就可以解除v8对node的内存使用限制了。

转载地址: http://www.jb51.net/article/120081.htm

原文地址:https://www.cnblogs.com/xiaojwang/p/9527767.html

时间: 2024-10-16 13:48:49

vue项目编译提示内存溢出的相关文章

Xamarin Android提示内存溢出错误

Xamarin Android提示内存溢出错误 错误信息:java.lang.OutOfMemoryError, Consider increasing the value of $(JavaMaxinumHeapSize). Java ran out of memory while executing ‘java.exe -jar’这时,需要设置Java编译堆栈大小.右击Android项目,设置项目的属性.在Android Options选项中,设置Java Max Heap Size为1G.

STM8S编译时内存溢出错误的解决办法

? 导致COSMIC报告"segment .ubsct overflow"错误的根本原因是内存溢出, 相关原因分析如下: ? 1.变量存储空间结构 ? STM8S105系列CPU的RAM地址范围为0~0x7FF的2K空间,其中默认将高512字节分配给堆栈,剩下0~0x5FF字节为变量存储空间 .在0~0x5FF的空间范围内,低256字节被定义为Zero page,其中包括.bsct,.ubsct,.bit,.share ? 可见, 当segment .ubsct overflow错误出

Xamarin.iOS项目编译提示Could not AOT the assembly

Xamarin.iOS项目编译提示Could not AOT the assembly 错误信息:Could not AOT the assembly **************.dll 这个错误是由于AOT编译文件太大造成的.用户可以尝试修改编译选项.在项目属性窗口中,设置iPhone Build Options,选择Linker Behavior中的Link all assemblies选项

VUE项目 启动提示 npn ERRT nissing script: dev解决办法

VUE项目 启动提示 npn ERRT nissing script: dev 提示 丢失 dev 解决办法 首先 查看项目目录里面的 package.json 文件, 文件内容如下: 发现红框这里是 server  那么就重新运行 cmd     重启命令:npm  run serve 如果上面红框是 dev   那么就重新运行 cmd           重启命令:cnpm run dev. 以上两步都是在依赖包安装的情况下就行 如果不放心依赖包是否完整 那就重新安装如下:  第一种情况se

ionic2 因为项目太大,编译导致内存溢出的解决方案

只需要改动一个文件即可 原始文件内容如下: @IF EXIST "%~dp0\node.exe" ( "%~dp0\node.exe" "%~dp0\node_modules\ionic\bin\ionic" %* ) ELSE ( @SETLOCAL @SET PATHEXT=%PATHEXT:;.JS;=;% node "%~dp0\node_modules\ionic\bin\ionic" %* ) 更改为 @IF EX

【项目 报错】 项目启动,内存溢出 可能出现的各种报错

内存溢出可能有如下的错误: 错误1: java.lang.OutOfMemoryError: PermGen space 错误2: Exception in thread "http-apr-8080-exec-2" 出现如上的错误,解决方法如下: 1.双击Tomcat 2.点击open launch configuration 3.点击Arguments 4.?添加的这段信息: -XX:PermSize=256M -XX:MaxPermSize=512m -Xms1024m -Xmx

tslint编译问题-内存溢出

public selectedSubject: Subject<{ id: string, music: string, title: string, user_tag_id: string, user_token: string }> = new Subject(); 改 public selectedSubject: Subject<any> = new Subject(); 如果返回对象数据结构不一致 本地汇报内存溢出 this.audioService.selectedSu

spark项目启动报内存溢出不能创建线程错误

1.错误信息如下: java.lang.OutOfMemoryError: unable to create new native thread    at java.lang.Thread.start0(Native Method)    at java.lang.Thread.start(Thread.java:714)    at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:950)  

MyEclipse下启动项目时JBoss内存溢出问题的解决

配置1:-Xms64m -Xmx512m 配置2:-c default -b 0.0.0.0-Xmx1024M -Xms512M -XX:MaxPermSize=256m