You need to enable JavaScript to run this app. GitLab CI配置高内存仍报JavaScript堆内存溢出如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI配置高内存仍报JavaScript堆内存溢出如何解决?

问题原因
  1. 核心配置错误:--max-old-space-size 参数的单位为MB而非字节,你设置的15032377839数值远超Node可识别的合理范围,配置完全失效,Node将使用默认的约2GB堆内存上限,因此日志中堆内存仅占用1.8GB左右就触发了内存溢出。
  2. TerserPlugin额外内存消耗:代码压缩阶段TerserPlugin默认启用多进程并行压缩,每个子进程都会独立占用内存,叠加后的总内存消耗很容易触达Node默认内存上限。
  3. 环境变量未生效:你配置的GENERATE_SOURCEMAP=false没有加export导出,仅为当前shell的局部变量,没有传递到后续的构建进程中,source map生成逻辑依然会执行,额外占用大量内存。
解决方案
  • 修正内存与环境变量配置
    在GitLab CI的BuildApp阶段导出正确的环境变量,修正后的配置如下:

    BuildApp:
      stage: build
      before_script:
        - export GENERATE_SOURCEMAP=false
        - export NODE_OPTIONS="--max-old-space-size=14336" # 14GB对应14*1024=14336MB
      script:
        - yarn
        - yarn prod
    
  • 优化TerserPlugin压缩配置
    调整webpack配置中的TerserPlugin参数,减少并行进程数降低内存消耗:

    const TerserPlugin = require('terser-webpack-plugin');
    
    module.exports = {
      optimization: {
        minimizer: [
          new TerserPlugin({
            parallel: 2, // 可根据实际情况调整,设置为1即可关闭并行压缩
            terserOptions: {
              compress: {
                drop_console: true, // 可选移除控制台输出,减少代码体积与压缩消耗
              }
            }
          })
        ]
      }
    }
    
  • 构建流程优化

    1. 开启GitLab CI的yarn缓存,避免每次构建全量重新安装依赖,降低内存开销
    2. 开启webpack构建缓存,减少重复编译的计算与内存消耗
    3. 若代码体积过大,可拆分代码块,降低单文件压缩的内存占用
  • 临时免配置解决方案
    若不想修改webpack配置,可直接修改package.json中的prod构建命令,手动指定Node内存上限:

    {
      "scripts": {
        "prod": "node --max-old-space-size=14336 node_modules/.bin/webpack --mode production"
      }
    }
    

内容的提问来源于stack exchange,提问作者János

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 04:36:06