You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Vue3+Vite+TypeScript构建时type-check阶段栈溢出错误

解决Vue3+Vite+TypeScript构建时type-check触发栈溢出的问题

可行解决方案

1. 排除第三方依赖的类型检查

栈溢出大概率是第三方库的复杂类型定义触发的,直接把node_modules从类型检查范围里排除:

  • 修改tsconfig.json的exclude字段:
    {
      "compilerOptions": { /* 你的现有配置 */ },
      "exclude": [
        "node_modules",
        "dist",
        "**/*.js" // 如果你不需要检查项目里的.js文件,也可以加上
      ]
    }
    
  • 或者精准排除出问题的库(比如报错里的@xmldom/xmldom),在package.json的type-check命令里加参数:
    "scripts": {
      "type-check": "vue-tsc --noEmit --exclude node_modules/@xmldom"
    }
    

2. 升级TypeScript和vue-tsc版本

这个栈溢出问题很多是TypeScript类型检查器的已知bug,升级到最新稳定版就能修复:

npm install typescript@latest vue-tsc@latest --save-dev

3. 调整构建命令的执行顺序

原来用run-p并行执行type-check和build-only,改成串行执行,减少同时处理的压力:

"scripts": {
  "build": "npm run type-check && npm run build-only"
}

如果还是不行,试试增大Node.js的栈大小:

"scripts": {
  "type-check": "node --stack-size=10000 ./node_modules/vue-tsc/bin/vue-tsc.js --noEmit"
}

4. 排查项目内的可疑文件

如果排除node_modules后还是报错,说明项目里的文件有循环类型引用或过于复杂的类型定义:

  • 用vue-tsc的追踪参数定位问题文件:
    vue-tsc --noEmit --traceResolution
    
  • 找到对应文件后,简化类型定义或者拆解循环引用。

问题原因

这个RangeError: Maximum call stack size exceeded是TypeScript类型检查器在处理递归/循环类型或者第三方库复杂类型定义时,递归调用层级超过了Node.js的栈上限导致的。dev模式下Vite默认不会做全量严格类型检查,所以不会触发,但build时的type-check会遍历所有文件(包括node_modules),就触发了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:28:10