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
相关产品推荐
相关产品推荐

