离线安装vscode插件后功能残缺,90%因运行时依赖未完整捕获;必须在联网机上安装插件、触发lsp下载并整目录打包(含out/dist/node_modules/server等子目录),再解压到离线机extensions目录,命名严格为publishername.extensionname-version,重启后状态应为“local”。

离线安装 VSCode 插件后功能残缺,90% 是因为依赖没带全,不是插件装错了——必须提前在有网机器上触发并打包完整运行时依赖,而不是只拷 .vsix 文件。
为什么装完插件列表显示“已安装”,但 Python 补全/调试/Vue 高亮全失效
语言类插件(如 ms-python.python、volarjs.volar、dbaeumer.vscode-eslint)本质是“壳”,首次启用时才会拉取真正的语言服务器(LSP)和 CLI 工具。离线环境下这些请求直接卡死,状态栏显示 “Downloading…” 或 Output 面板报 spawn ENOENT。
- Python 插件依赖
pyright(或pylance)、debugpy、jedi等,它们以独立进程形式运行,藏在扩展目录的out/、dist/或node_modules/子路径下 - Vue 插件(Volar)依赖
volar-server二进制,通常位于server/目录,ARM Mac 上还必须匹配darwin-arm64构建版本 - ESLint 插件不自带
eslint可执行文件,需项目本地node_modules/.bin/eslint或全局安装,离线时这两者都不存在
如何在有网机器上完整捕获所有依赖
不能只下载 .vsix,必须让插件“真正跑起来一次”,再整目录打包。
- 在联网机器上安装目标插件(例如
code --install-extension ms-python.python-2024.6.0.vsix) - 打开一个
.py文件,等待状态栏不再显示 “Downloading Pylance” 或 “Starting debugpy” - 确认 Output 面板 → Python 通道无红色错误,且能触发补全/断点
- 关闭所有 VSCode 实例(包括托盘进程),用
code --status确认无残留 - 进入用户 extensions 目录:
– Windows:%USERPROFILE%\.vscode\extensions\ms-python.python-2024.6.0\
– macOS:$HOME/.vscode/extensions/ms-python.python-2024.6.0/
– Linux:$HOME/.vscode/extensions/ms-python.python-2024.6.0/ - 整个文件夹压缩为
ms-python.python-2024.6.0.tar.gz(不要只打包extension/子目录)
离线机器上部署时的关键动作
直接解压到 extensions 目录比 code --install-extension 更可靠,绕过签名校验,也避免 CLI 路径/权限问题。
- 确保目标路径可写:Windows 的 NTFS 加密、macOS SIP、WSL 挂载的 Windows 分区都可能导致写入失败;临时用
--extensions-dir指向用户主目录下的普通子目录更稳妥 - 解压后文件夹名必须严格为
publishername.extensionname-version(如ms-python.python-2024.6.0),VSCode 依赖这个命名识别插件 - 重启 VSCode 后,按
Ctrl+Shift+P输入Developer: Show Running Extensions,状态应为Local而非Marketplace - 首次打开文件时仍可能短暂卡顿(加载本地 LSP),但不会出现 “Downloading…” 提示
依赖链怎么查?别靠猜
每个插件的 package.json 里都有明确声明,但要注意字段含义不同:
-
extensionDependencies:安装时强制要求的其他插件 ID(如ms-python.python依赖ms-toolsai.jupyter),必须一并离线安装 -
engines.vscode:VSCode 主版本兼容性(如"^1.85.0"),低于此版本会静默跳过整个安装流程 -
contributes.debuggers或contributes.languages:暗示底层需要哪些 runtime 服务(如 Python 调试器需debugpy),这些不在extensionDependencies里,得看文档或源码 - 推荐工具:
unzip -p your-extension.vsix extension/package.json | grep -A5 "extensionDependencies\|engines"
最常被忽略的是:LSP 二进制文件本身有平台和架构绑定,ARM Mac 上拷 x64 版本的 pyright-server 不会报错,只会静默不启动——得进 server/ 目录用 file pyright-server 看实际架构。











