Linux 构建 Vue 项目报错 JavaScript heap out of memory(2024/06/26)

Linux 构建 Vue 项目报错 JavaScript heap out of memory(2024/06/26)

文章目录

    • [Linux 构建 Vue 项目报错 JavaScript heap out of memory(2024/06/26)](#Linux 构建 Vue 项目报错 JavaScript heap out of memory(2024/06/26))
      • [一. 产生环境](#一. 产生环境)
      • [二. 问题描述](#二. 问题描述)
      • [三. 原因分析](#三. 原因分析)
      • [四. 解决方法](#四. 解决方法)
      • [五. 疑问](#五. 疑问)

一. 产生环境

  • Debian GNU/Linux 12;
  • NodeJS 16.19.0;

二. 问题描述

在 Linux 环境下,通过 npm run build 构建 Vue 项目的时候遇到如下错误:

shell 复制代码
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

三. 原因分析

根据报错信息可知是堆内存空间不足导致的,但构建所用的 Linux 机器物理内存为 256G,通过监控资源占用发现在 node 构建时内存并未占满,所以猜测是系统对进程所用的最大内存进行了限制。可能的限制如下:

  1. 查看 Linux 系统对进程可分配最大内存的限制;

    shell 复制代码
    $ ulimit -m
    unlimited

    结果为 unlimited,即不限制,因此不是系统限制了进程所能分配的最大内存。

  2. 查看 Node.js 的默认内存限制;

    shell 复制代码
    $ node -e "console.log(v8.getHeapStatistics().heap_size_limit / 1024 / 1024 + ' MB')"
    4144 MB

    结果为 4144 MB,显而易见问题出在这里,Node.js 的默认内存限制太小导致构建时获取不到足够的堆内存。

四. 解决方法

调整 Node.js 的默认内存限制,例如增加到 16G,下面介绍两种实现方法(原理相同):

  1. 命令行设置环境变量;

    • Windows

      shell 复制代码
      $ set NODE_OPTIONS="--max_old_space_size=16384" && npm run build
    • Linux

      shell 复制代码
      $ export NODE_OPTIONS="--max_old_space_size=16384" && npm run build
  2. package.json 的 scripts 部分直接增加内存限制;

    • Windows

      json 复制代码
      "scripts": {
        "build": "set NODE_OPTIONS='--max_old_space_size=16384' && vue-cli-service build"
      }
    • Linux

      json 复制代码
      "scripts": {
        "build": "NODE_OPTIONS='--max_old_space_size=16384' vue-cli-service build"
      }
    • 跨平台

      shell 复制代码
      $ npm install cross-env
      json 复制代码
      "scripts": {
        "build": "cross-env NODE_OPTIONS='--max_old_space_size=16384' vue-cli-service build"
      }

五. 疑问

Windows 环境下 Node.js 的默认内存限制也是 4144 MB,但是在不增加 Node.js 默认内存限制的情况下可以构建成功,原因不详???

相关推荐
HalvmånEver1 分钟前
Linux:基于匿名管道创建出简易进程池(进程间通信五)
linux·运维·服务器·c++·进程池·管道pipe
工程师老罗2 分钟前
龙芯2k0300 U盘烧录Linux系统,从Ubuntu到PMON自动启动
linux·运维·ubuntu
pas13610 分钟前
27-mini-vue provide-inject
前端·javascript·vue.js
_UMR_11 分钟前
前端Vue开发环境搭建(安装Node.js)
前端·vue.js·node.js
李永吉17 分钟前
一款便捷的npm源管理工具nrm
前端·npm·node.js
h_jQuery18 分钟前
vue项目中使用canvas实现手写文字(批注)功能
开发语言·前端·javascript
Ronin30521 分钟前
【Linux网络】基于Reactor反应堆模式的高并发服务器
linux·网络·reactor·epoll·非阻塞·et模式·高并发服务器
winfredzhang21 分钟前
[全栈实战] 从零打造一个“沉浸式”私人云端阅读器 (Node.js + EPUB.js)
javascript·css·node.js·html·extjs·epub阅读器
duanyuehuan26 分钟前
|| ?. ?? ??= 4种操作符
前端·javascript·vue.js
胖咕噜的稞达鸭28 分钟前
库的原理和制作 动态库如何和可执行程序相关联,为什么程序入口点不是main函数,GOT表,PIC地址无关代码(2)
linux·c语言·开发语言·网络