VSCode悬停提示离线可用的关键是让语言服务明确使用本地文档而非联网拉取:TS/JS需配置typeRoots和types并重启TS服务,禁用autoImportSuggestions;Python需配置Pylance stubPath;HTML/CSS需关闭html.suggest.html5和css.mdnsuggest并重载窗口。

VSCode 悬停提示默认依赖语言服务器在线拉取文档(比如 TypeScript 的 @types、HTML/CSS 的 MDN 链接),断网时就只剩空签名或 any。要让它真正离线可用,关键不是“关掉网络”,而是让语言服务明确知道:文档就在本地,别往外找。
TS/JS 项目必须显式配置 typeRoots 和 types
即使你本地装了 @types/node 和 @types/react,tsserver 默认仍会尝试联网校验。断网时它超时放弃,直接跳过类型解析。
- 在项目根目录的
tsconfig.json或jsconfig.json中添加:
{
"compilerOptions": {
"typeRoots": ["./node_modules/@types"],
"types": ["node", "jest", "webpack-env"]
}
}
注意:types 列表必须写全你实际用到的包名,不能只写 ["node"] 却又用了 React —— 缺失项不会被自动补全。
改完后重启 TS 服务:按 Ctrl+Shift+P → 输入 TypeScript: Restart TS server,否则配置不生效。
禁用 tsserver 的自动联网行为
tsserver 默认开启 autoImportSuggestions 和远程类型探测,这些在断网时只会拖慢响应甚至阻塞 hover。
- 在
tsconfig.json中加入:
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"moduleResolution": "node",
"skipLibCheck": true,
"noEmit": true
}
- 同时在 VSCode 设置中关闭:
typescript.preferences.autoImportSuggestions → 设为 falsejavascript.preferences.autoImportSuggestions → 同样设为 false
这两项关掉后,tsserver 不再尝试从 npm registry 补全缺失类型,完全依赖本地 node_modules/@types。
Python 项目确保 Pylance 使用本地 stubs
Pylance 默认也会尝试联网获取第三方库的类型存根(如 requests、numpy),断网时 fallback 不稳定。
- 确认
python.languageServer设为Pylance(不是Default或Jedi) - 在项目根目录创建
.vscode/settings.json,强制指定 stubs 路径:
{
"python.analysis.stubPath": "./stubs",
"python.analysis.extraPaths": ["./stubs"]
}
然后手动把需要的 stubs(比如从 microsoft/python-type-stubs 下载)放进去。没有 stubPath 配置时,Pylance 只查 site-packages,而很多包不自带完整 stubs。
HTML/CSS 的 MDN 链接本来就不该依赖网络
HTML 文件里悬停出现的 MDN 链接,是 VSCode 内置行为,内容其实已打包进编辑器,但默认启用联网校验。断网时它可能显示“Loading…”或空白。
- 关掉两个开关即可强制使用本地缓存:
html.suggest.html5 → falsecss.mdnsuggest → false
改完后执行 Developer: Reload Window,不是简单重启。reload 后,document.getElementById 悬停不再卡住,参数说明和兼容性表格照常显示。
真正容易被忽略的是:所有这些配置都依赖语言服务加载完成。如果状态栏右下角还显示 Initializing JS/TS language features...,hover 就不可能有完整信息——哪怕你已经配对了所有字段。


















