插件更新卡在“正在下载…”或报eperm错误,主因是macos系统拦截写入extensions目录,需清除com.apple.quarantine属性、修复目录权限(sudo chown -r $user:staff ~/library/application\ support/code)、关闭实时防护软件,并清理缓存目录。

插件更新卡在“正在下载…”或报 EPERM 错误
Mac 上插件更新失败,最常见现象是点击“更新”后进度条不动、右下角通知反复弹出,或控制台报 EPERM: operation not permitted。这不是插件本身坏了,而是 VS Code 的扩展安装器(vscode-extension-host)尝试往 ~/Library/Application Support/Code/Extensions/ 写文件时被系统拦截。
原因通常有三个:com.apple.quarantine 属性残留(尤其从非官网渠道安装的 VS Code)、用户目录权限错乱、或杀毒软件(如 CleanMyMac、Malwarebytes)扫描时锁住扩展目录。
实操建议:
- 先运行
ls -l@ ~/Library/Application\ Support/Code/Extensions/,如果看到com.apple.quarantine这一行,说明每个插件包都被标记为“来自未知开发者”,得批量清除:xattr -rd com.apple.quarantine ~/Library/Application\ Support/Code/Extensions/ - 检查目录归属是否异常:执行
ls -ld ~/Library/Application\ Support/Code,输出中第一列应为drwx------,所有者是当前用户;若显示root或权限含rwx给 group/other,就用sudo chown -R $USER:staff ~/Library/Application\ Support/Code - 临时退出 CleanMyMac、Avast 等带“实时防护”功能的工具,再重试更新——它们常把
.vsix解压过程当成可疑行为
extensions.autoUpdate 设为 none 后仍自动更新
即使你在设置里关掉了 extensions.autoUpdate,某些插件(尤其是 Microsoft 官方出品的如 ms-python.python、ms-vscode.cpptools)仍可能在后台静默拉取更新。这是因为 VS Code 1.90+ 引入了“延迟更新策略”:它不立刻安装,但会预下载到缓存,下次启动时才应用。
这不是 bug,而是设计行为。要真正阻止,必须双管齐下:
- 在
settings.json中明确写死两行:"extensions.autoUpdate": "none","extensions.autoCheckUpdates": false - 删掉已缓存的待更新包:执行
rm -rf ~/Library/Caches/com.microsoft.VSCode/Cache/extensions/(注意路径是Cache,不是Application Support) - 重启 VS Code 后,打开命令面板(
Cmd+Shift+P),输入Developer: Toggle Developer Tools,切到 Console 标签页,手动触发一次插件市场搜索(比如搜 “eslint”),观察是否有GET https://marketplace.visualstudio.com/...请求发出——没请求,才算真正静默
插件更新后立即崩溃或功能失效
典型表现是:更新完 Python 插件,Ctrl+Shift+P 打不开命令面板;或 C/C++ 插件升级后 IntelliSense 完全不工作。这往往不是版本冲突,而是插件的本地缓存(~/.vscode/extensions/ms-python.python-*/out/ 下的 node_modules)与新版 VS Code 的 Electron 运行时不兼容。
别急着回退插件版本,先清缓存再试:
- 关闭所有 VS Code 窗口(包括菜单栏右上角的托盘图标)
- 执行:
rm -rf ~/.vscode/extensions/ms-*/*-*/out/node_modules(把ms-开头的插件缓存全清) - 重新打开 VS Code,等右下角提示“正在安装扩展依赖”,让它自动重建
node_modules - 如果仍不行,再进命令面板执行
Developer: Reinstall Extension,选对应插件——它会跳过网络校验,直接重解压原始.vsix
为什么改了 http.proxy 对插件更新没用?
VS Code 设置里的 http.proxy 只影响编辑器内部网络请求(比如 GitHub Copilot 调用、远程 SSH 连接、市场页面加载),但插件的实际下载和安装由独立的 extensionHost 进程完成,它走的是系统级网络栈,**不读取 VS Code 的 proxy 配置**。
所以你在国内公司网络下设了 http.proxy,插件市场页面能刷出来,但点“更新”还是超时——因为下载 .vsix 包那一步根本没走代理。
解决办法只有两个:
- 在终端里设系统级代理再启动 VS Code:
export HTTPS_PROXY=http://127.0.0.1:7890; open -n -b "com.microsoft.VSCode"(适配你的本地代理端口) - 更稳妥的方式:关掉自动更新,改用离线方式。去 marketplace.visualstudio.com 手动下载
.vsix文件,然后在 VS Code 里用Extensions: Install from VSIX命令安装
真正容易被忽略的是:插件更新失败时,VS Code 不会主动清理失败的临时文件。这些残留在 ~/Library/Caches/com.microsoft.VSCode/Cache/extensions/ 里的半截 .vsix 会持续干扰后续更新,每次遇到问题,先清这个目录比调代理更有效。











