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

Vite+TypeScript:Yarn Workspace执行命令时内存不足问题排查

排查Yarn工作区构建/测试内存溢出问题

1. 对齐TypeScript路径与Vite别名配置

根目录tsconfig.json的paths配置不会自动被Vite识别,若未同步配置Vite别名,会导致模块重复解析,快速耗尽内存。

在pkg1的vite.config.ts中添加别名映射:

import { defineConfig } from 'vite'
import path from 'path'

export default defineConfig({
  resolve: {
    alias: {
      '@org/pkg2': path.resolve(__dirname, '../pkg2'),
      '@org/pkg2/*': path.resolve(__dirname, '../pkg2/*'),
    },
  },
})

pkg2的Vite配置也需要同步添加对应别名(如果pkg2独立构建的话)。

2. 移除冗余的TypeScript项目引用

子包tsconfig.json中的references字段指向tsconfig.node.json,但Vite驱动的项目通常不需要启用复合项目编译,该配置会导致TypeScript重复扫描文件,额外占用内存。尝试移除该字段:

{
  "extends": "../../tsconfig.json",
  "include": ["src/**/*", "index.ts"]
}

如果确实需要复合项目能力,再在根目录tsconfig.json中添加"composite": true。

3. 优化Jest测试的内存消耗

测试阶段的内存溢出可通过以下配置优化:

  • 启用ts-jest的isolatedModules模式,跳过全量类型检查:
    module.exports = {
      transform: {
        '^.+\\.tsx?$': ['ts-jest', { isolatedModules: true }],
      },
    }
    
  • 确保Jest缓存功能正常,避免每次测试重复编译所有文件;拆分大型测试文件,减少单文件测试用例数量。

4. 排查隐性循环依赖

即使你明确pkg1依赖pkg2,也要检查是否存在间接循环依赖(比如pkg2的某个依赖反向引用pkg1)。用工具扫描:

npx madge --circular packages/pkg1/src

循环依赖会导致模块解析时无限递归,直接触发内存溢出。

5. 精简Vite构建配置

  • 若不需要sourcemap,关闭该功能可大幅降低内存占用:
    export default defineConfig({
      build: {
        sourcemap: false,
      },
    })
    
  • 用rollup-plugin-visualizer分析构建产物,排查是否有重复打包的模块:
    import { defineConfig } from 'vite'
    import { visualizer } from 'rollup-plugin-visualizer'
    
    export default defineConfig({
      plugins: [visualizer()],
    })
    

6. 确认Yarn工作区依赖链接正确性

确保pkg1的package.json中,pkg2的依赖是工作区本地链接,而非外部npm包:

{
  "dependencies": {
    "@org/pkg2": "workspace:*"
  }
}

错误使用外部版本会导致依赖重复安装与解析,增加内存负载。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:36:42