code --install-extension 是唯一可靠的VS Code命令行安装方式,仅校验包结构和vscode版本兼容性,需用绝对路径、--force参数及timeout兜底,安装后须检查禁用状态并重启。

code --install-extension 是唯一可靠的命令行入口
VS Code 官方只支持 code --install-extension 安装本地 .vsix 文件,它不走网络、不调 Marketplace API,只校验包结构和 package.json 中的 engines.vscode 字段。其他方式(如直接复制文件夹)属于底层绕过,易因目录名错误或缓存未刷新而失效。
必须用绝对路径:code --install-extension /home/user/ext/prettier-3.2.5.vsix(Linux/macOS)或 code --install-extension C:/ext/eslint-2.4.0.vsix(Windows,推荐正斜杠)。相对路径在非 VS Code 启动的终端中大概率失败。
- 每条命令最多支持 10 个
--install-extension参数,超了要分批,否则静默截断 - 失败时会明确输出错误,例如
Unable to install extension 'esbenp.prettier-vscode' as it is not compatible with VS Code '1.79.2' - 安装后插件默认禁用,尤其含
"workspace"或"terminal"权限声明的插件,需手动启用或重启 VS Code
脚本里必须先探测 code 命令是否可用
code 不是系统自带命令,它的存在依赖用户是否执行过 Shell Command: Install 'code' command in PATH。实测常见失效场景包括:macOS 通过 .dmg 安装但没运行过 GUI、Linux Snap 版本默认无 code、Windows PowerShell 中 code 是函数而非可执行文件。
脚本开头应加探测逻辑:
if ! command -v code > /dev/null; then echo "error: code command not found" exit 1 fi
- Linux Snap 用户可手动创建符号链接:
sudo ln -s /snap/code/current/usr/share/code/bin/code /usr/local/bin/code - Windows Git Bash 下若
code不识别,改用cmd /c "code --install-extension ..." - 不要依赖
set -e全局中断,单个插件失败不该阻断整个流程
批量安装要加 timeout 和退出码判断
code --install-extension 默认无超时,遇到签名校验卡住(如企业内网无法连微软证书服务器)、或插件包损坏,会无限等待。脚本必须为每个安装加兜底:
- 用
timeout 60s code --install-extension "$file" --force限制单次操作时长 - 检查
$?:0 表示成功;1 表示明确失败(版本不兼容、签名无效等);非 0 非 1 通常是timeout发送的 SIGTERM - 对失败项记录到
failed-install.log,内容包含文件路径和错误时间,方便后续人工重试 -
--force必须加上,否则已存在同 ID 插件时会跳过,导致版本固化失败
装完不生效?重点查 extensions.json 和工作区禁用状态
离线安装后插件“看不见”或“点不动”,往往不是安装失败,而是环境配置没对齐:
- 打开
$HOME/.config/Code/User/extensions.json(Linux)或%APPDATA%\Code\User\extensions.json(Windows),确认刚装的插件 ID 是否出现在disabledExtensions数组里——这是真实禁用清单,code --list-extensions不会显示它 - 按
Ctrl+Shift+P→ 输入Developer: Toggle Developer Tools→ 看 Console 是否有activation failed或Extension host terminated - 右下角齿轮图标 →
Extensions→ 搜索插件名 → 看右上角是否显示Disable (Workspace),这是工作区级禁用,比全局设置优先级更高 - 某些插件(如
bradlc.vscode-tailwindcss)依赖其他插件才能激活,得先装esbenp.prettier-vscode才能格式化 Tailwind 类名
最常被忽略的是:安装后没完全退出 VS Code(托盘进程还在),导致扩展缓存未刷新,重启前看不到新插件。











