vscode 一直停留在 ts 正在初始化,本质是 TypeScript 语言服务进程加载卡住,常见原因是项目体积过大 node_modules 依赖过多 tsconfig 配置异常缓存损坏版本冲突扩展报错,导致 TS Server 长时间无法完成项目扫描,状态栏一直显示正在初始化,代码提示类型跳转全部失效。之所以会长期卡在这个状态,是因为 vscode 内置的 TS 语言服务启动之后,需要读取 tsconfig.json,扫描项目全部 ts 文件,解析依赖类型声明,建立类型索引,如果项目里面存在大量文件循环依赖超大类型包,或者缓存目录损坏,TS Server 就会阻塞,一直停留在初始化阶段,部分情况还伴随 CPU 占用很高或者内存持续上涨。处理的时候优先重启 TS 语言服务,之后清理 TS 缓存,检查 tsconfig 配置,升级或者切换 TS 版本,排查冲突扩展,大型项目开启增量编译优化,按顺序逐项排查,大部分卡死问题都可以恢复正常。
常见原因对照表
| 故障原因 | 典型现象 | 处理方向 |
|---|---|---|
| TS Server 进程卡死 | 状态栏持续初始化,CPU 占用偏高 | 重启 TS 语言服务 |
| TS 缓存损坏 | 重启 vscode 依旧卡住 | 删除 ts 缓存目录 |
| tsconfig 配置错误 | 刚打开项目就卡在初始化 | 校验 tsconfig 语法和配置项 |
| 项目文件数量巨大 | 大型 monorepo 项目容易卡住 | 配置 include 排除不需要扫描目录 |
| TS 版本和 vscode 内置版本冲突 | 切换版本之后开始异常 | 指定项目使用本地 TS 版本 |
| 其他扩展冲突 | 多个语言类扩展同时占用 TS 服务 | 禁用多余扩展测试 |
| node_modules 异常 | 依赖包类型声明损坏 | 重装依赖 |
分步排查操作
第一步 重启 TS 语言服务
打开 vscode,按下快捷键调出命令面板,输入 TypeScript Restart TS Server,执行重启,这是最快的优先方案,很多临时进程卡死,重启服务之后 ts 正在初始化就可以正常完成。
第二步 校验 tsconfig.json 配置
打开项目根目录 tsconfig.json,检查 json 语法有没有逗号多余括号错误,重点核对 include exclude files 字段,如果没有配置 exclude,TS 会扫描 node_modules,超大依赖目录会直接拖慢初始化,把 node_modules dist build 这些目录加入 exclude,减少扫描文件数量。
第三步 清理 TS 缓存
关闭 vscode,找到项目下的 tsbuildinfo 增量缓存文件,还有 vscode 的 TS 服务缓存,删除缓存文件之后重新打开项目,缓存损坏是非常高频诱因,旧缓存索引和当前代码不匹配,TS 服务会一直卡在初始化加载阶段。
第四步 切换 TS 版本
vscode 默认使用内置 TS 版本,如果项目本地 typescript 版本和内置版本不兼容,可以在 vscode 命令面板选择 TypeScript Select TypeScript Version,切换成项目本地 node_modules 里面的 typescript 版本,解决版本兼容造成的初始化卡死。
第五步 排查扩展冲突
临时禁用所有第三方扩展,只保留官方 TypeScript 扩展,重新打开项目测试,如果初始化恢复正常,就逐个启用扩展,定位是哪一个扩展和 TS 语言服务产生冲突,常见冲突是其他类型检查扩展语法校验扩展。
第六步 大型项目专项优化
monorepo 大型项目,开启 tsconfig 里面的 incremental 增量编译,合理拆分项目,配置 project references,不要让单个 TS 服务加载全部子包,减少单次扫描文件总量,降低初始化压力。
第七步 重装依赖
如果 node_modules 里面类型声明文件损坏,删除 node_modules 之后重新安装依赖,再重新打开 vscode,部分损坏的 d.ts 类型文件会让 TS 解析报错,阻塞初始化流程。
进阶排查要点
如果上面操作依旧无效,可以查看 TS Server 日志,在输出面板选择 TypeScript,查看报错堆栈,日志会提示具体是哪一个文件或者哪一项配置导致解析失败。
内存不足也会造成 TS 服务初始化失败,大型项目建议保证电脑有足够可用内存,内存不足的时候 TS 进程会被系统限制,一直停留在初始化状态。
vscode 版本过旧也存在 TS 服务已知 bug,可以升级 vscode 到稳定新版,新版一般会修复 TS Server 初始化卡死相关缺陷。
【常见问题】
问题 1 vscode 一直 ts 正在初始化重启 vscode 也没用怎么办
回答 1 vscode 一直 ts 正在初始化,单纯重启 vscode 无效的时候,优先执行 Restart TS Server,接着清理 ts 缓存检查 tsconfig,继续排查扩展冲突,解决 vscode 一直 ts 正在初始化卡死问题。
问题 2 为什么 monorepo 项目 vscode 一直 ts 正在初始化
回答 2 monorepo 项目文件数量多,如果 tsconfig 没有配置 exclude,vscode 的 TS 服务会扫描大量子包,造成 vscode 一直 ts 正在初始化,增加 exclude 和 project references 可以优化加载速度。
问题 3 vscode 一直 ts 正在初始化和 TS 版本有关系吗
回答 3 有关系,本地 typescript 版本和 vscode 内置 TS 版本不兼容,就会出现 vscode 一直 ts 正在初始化,切换成项目本地 TS 版本,一般可以解决 vscode 一直 ts 正在初始化故障。
问题 4 扩展冲突会导致 vscode 一直 ts 正在初始化吗
回答 4 会,第三方扩展抢占 TS 语言服务资源的时候,会造成 vscode 一直 ts 正在初始化,禁用多余扩展单独测试,就可以确认是不是扩展冲突引发 vscode 一直 ts 正在初始化。
【免责申明】
本文 vscode TS 初始化排查方案为通用技术说明,不同项目框架 tsconfig 写法以及 vscode 版本存在差异,操作前建议备份项目配置文件,本文不保证所有特殊项目环境都可以彻底解决该问题。


