You need to enable JavaScript to run this app. Vue.js 2项目npm run build报E2BIG错误,serve运行正常
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js 2项目npm run build报E2BIG错误,serve运行正常

Vue 2 项目生产构建报 spawn E2BIG 问题

原问题描述

我正在开发Vue.js 2应用程序,使用的操作系统为Ubuntu 20.04.1 LTS。
我的 package.json 文件内容如下:

{
  "name": "my-app",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "vue": "^2.6.12",
    "vue-router": "^3.4.9",
    "vuex": "^3.6.2",
    "vuex-persistedstate": "^4.0.0-beta.3",
     ...and others
  },
  "devDependencies": {
    ...some dependencies
  }
}

执行 npm run build 命令时,抛出如下异常:

> vue-cli-service build

⠹  Building for production...internal/child_process.js:403
    throw errnoException(err, 'spawn');
    ^

Error: spawn E2BIG
    at ChildProcess.spawn (internal/child_process.js:403:11)
    at Object.spawn (child_process.js:553:9)
    at new PoolWorker (/workspace/___/___/___/node_modules/thread-loader/dist/WorkerPool.js:46:43)
    at WorkerPool.createWorker (/workspace/___/___/___/node_modules/thread-loader/dist/WorkerPool.js:341:23)
    at WorkerPool.distributeJob (/workspace/___/___/___/node_modules/thread-loader/dist/WorkerPool.js:335:28)
    at runQueue (/workspace/___/___/___/node_modules/neo-async/async.js:8099:9)
    at processTicksAndRejections (internal/process/task_queues.js:75:11) {
  errno: -7,
  code: 'E2BIG',
  syscall: 'spawn'
}
npm ERR! code 1
npm ERR! path /workspace/___/___/___
npm ERR! command failed
npm ERR! command sh -c vue-cli-service build

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/___/.npm/_logs/2021-03-08T18_57_06_018Z-debug.log

执行 npm run serve 命令时所有功能运行正常,求定位问题原因,如需补充其他相关配置文件可随时告知。

问题根因

  • 报错代码 E2BIG 是Linux系统内核返回的标准错误,代表创建子进程时,传入的启动参数、环境变量总长度超过了内核允许的单进程传参上限(即 ARG_MAX 阈值)
  • 从堆栈调用链可定位,错误触发点是 thread-loader 创建编译工作子进程时抛出:Vue CLI 在生产构建场景下默认开启多线程编译优化,创建工作子进程时会透传当前主进程的全部环境变量与启动参数
  • 开发服务模式无异常的原因:npm run serve 场景下的thread-loader worker初始化数量、透传参数总量远小于生产构建阶段,不会触及系统传参上限
  • Ubuntu 20.04 默认的 ARG_MAX 阈值为2MB,如果当前终端会话的环境变量总长度接近或超过这个值,就会在创建构建子进程时触发校验失败

解决方式

  • 临时调高系统传参上限
    执行命令调整当前会话的内核参数:
    sudo sysctl -w kernel.arg_max=16777216
    
    调整完成后重新执行构建命令即可。如需永久生效,可将 kernel.arg_max=16777216 追加写入 /etc/sysctl.conf 配置文件。
  • 关闭Vue CLI的多进程编译逻辑
    在项目根目录的 vue.config.js 中新增配置:
    module.exports = {
      parallel: false
    }
    
    该配置会关闭thread-loader的多线程编译能力,构建流程全程在主进程执行,从根本上避开子进程传参长度校验的问题,代价是生产构建速度会有一定幅度下降。
  • 清理冗余环境变量
    检查当前终端会话内导出的全局环境变量,清理掉非构建流程必需的大段冗余配置(如被错误导出的大段JSON配置、超长日志路径变量等),降低传给子进程的总参数长度,再重新执行构建。

内容的提问来源于stack exchange,提问作者Aleks Vujic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 10:45:05