根本原因是vscode的tsserver启动失败,常见于工作区存在超大node_modules、错误tsconfig.json路径或不兼容typescript版本;可通过禁用本地tsdk、验证配置、排除干扰等方式解决。

为什么 JavaScript and TypeScript 扩展会卡在“正在初始化JS/TS语言功能”
根本原因不是扩展坏了,而是 VSCode 的 TS 服务(tsserver)启动失败或被阻塞。常见触发点是工作区里有超大 node_modules、错误的 tsconfig.json 路径、或者项目根目录下存在不兼容的 TypeScript 版本。
VSCode 默认会尝试加载工作区里的 typescript 包(如果有的话),而不是用内置版本——一旦这个包损坏、版本太老(比如 typescript@3.9),或依赖缺失,tsserver 就会卡住不动,状态栏就一直显示那句提示。
- 检查当前 TS 版本:
npm ls typescript或看node_modules/typescript/package.json中的version - 确认
tsconfig.json是否存在语法错误,或"include"指向了巨量文件(比如整个dist/) - 观察 VSCode 输出面板 → 选择
TypeScript,里面常有类似TypeError: Cannot read property 'map' of undefined的真实报错
怎么快速绕过初始化卡死,先让编辑器可用
最直接的办法是强制禁用项目级 TS 加载,改用 VSCode 内置的稳定版本。这不是修复,但能立刻恢复跳转、补全等基础功能。
- 打开命令面板(
Ctrl+Shift+P/Cmd+Shift+P),运行Preferences: Open Settings (JSON) - 添加配置:
"typescript.preferences.includePackageJsonAutoImports": "auto",<br>"typescript.preferences.enablePromptUseWorkspaceTsdk": false,<br>"typescript.tsdk": "./node_modules/typescript/lib"
→ 把最后一行删掉或注释掉,确保不指向本地node_modules - 重启 VSCode 窗口(不是重载窗口),状态栏提示通常会消失
注意:"typescript.tsdk" 配置项一旦存在且路径无效,VSCode 就会反复尝试加载并卡死;留空或删掉它,才真正 fallback 到内置版本。
如何定位并清理导致卡死的 tsconfig.json 问题
很多项目把 tsconfig.json 放在子目录(比如 packages/foo/tsconfig.json),但 VSCode 会从打开的文件夹根开始向上查找,结果误用了某个不完整或测试用的配置。
- 打开 VSCode 设置,搜
typescript.preferences.disableAutomaticTypeAcquisition,设为true—— 先关掉自动类型获取,排除干扰 - 在项目根执行
npx tsc --noEmit --watch,看终端是否报错;如果报error TS5083: Cannot read file 'xxx/tsconfig.json',说明路径引用有问题 - 检查
tsconfig.json里是否有"extends"指向不存在的路径,或"compilerOptions.types"引入了未安装的包(比如["jest"]但没装@types/jest)
一个有效验证方式:临时把 tsconfig.json 改名为 tsconfig.json.bak,再重启 VSCode —— 如果状态栏提示消失,基本就是它的问题。
长期避免卡死的关键配置和习惯
卡死本质是 TS 服务资源耗尽或逻辑崩坏,不是偶然。真要稳定,得控制它的作用域和依赖来源。
- 在项目根加
.vscode/settings.json,固定使用 VSCode 自带 TS:"typescript.tsdk": ""
(空字符串比不写更明确) - 用
"files.exclude"或"search.exclude"隐藏巨型目录:"**/node_modules/**": true,<br>"**/dist/**": true
- 避免在
tsconfig.json中写"include": ["**/*"],改用精确路径,比如["src/**/*", "test/**/*"] - 如果必须用本地 TS(比如 CI 要求版本一致),升级到
typescript@5.0+,旧版对现代 Node.js 和 ESM 支持差,极易卡死
最常被忽略的一点:多人协作项目里,有人提交了 node_modules/typescript 到 Git,其他人 npm install 后会意外继承这个坏版本——查 .gitignore 里有没有漏掉 node_modules/。











