vscode插件更新后不会自动重启,因更新仅替换文件而不刷新extensionhost进程;必须手动执行developer: restart extension host才能加载新代码,否则require.cache仍引用旧模块。

VSCode 插件更新后不会自动重启,这不是 bug,而是设计行为——更新操作本身不触发任何进程重启逻辑,所有插件仍运行在旧的 extensionHost 进程中,新代码根本没加载。
为什么“更新完成”不等于“新功能已就位”
插件更新只是把新版本文件解压到 ~/.vscode/extensions/ 对应目录,但正在运行的 extensionHost 进程仍引用旧版 JS 模块缓存。除非显式重启该进程,否则新代码永远不会执行。
- 常见错觉:看到“Update All”按钮变灰、状态栏提示“Updated”,就以为生效了
- 实际现象:格式化快捷键失效、右键菜单没新增项、命令面板搜不到新命令
- 根本原因:Node.js 的
require.cache未清空,模块热替换(HMR)在 VSCode 扩展系统中不被支持
Developer: Restart Extension Host 是唯一有效手段
这个命令不是“建议操作”,而是强制刷新插件运行时环境的最小必要动作。它会终止当前 extensionHost 进程,并用新版本代码重建整个插件上下文。
- 必须手动触发:按
Ctrl+Shift+P→ 输入Developer: Restart Extension Host→ 回车 - 不要依赖“重新加载窗口”(
Developer: Reload Window):它会重载 UI 层,但可能跳过某些扩展激活逻辑 - 若执行后立刻报
Extension host terminated unexpectedly,说明新版本插件启动阶段就崩溃,需查Developer: Open Extension Host Log
哪些情况会让 Restart Extension Host 失效
即使正确执行了重启命令,插件仍不工作,往往是因为底层依赖或环境没同步更新:
-
ms-python.python更新后找不到解释器:Python 路径配置(python.defaultInterpreterPath)没指向新安装的 Python 版本 -
esbenp.prettier-vscode更新后不格式化:项目根目录缺少.prettierrc或prettier.config.js,新版默认不再 fallback 到全局配置 - Remote-SSH 插件更新后连接卡住:远端
~/.vscode-server版本未同步,需手动rm -rf ~/.vscode-server再重连 - 插件启用状态被覆盖:工作区设置(
.vscode/settings.json)里写了"extensions.ignoreRecommendations": true,导致更新后自动禁用
最常被忽略的一点:插件更新后,它的 activationEvents 触发条件可能已变更。比如新版 bradlc.vscode-tailwindcss 改为只监听 onLanguage:html,而你打开的是 .njk 文件——这时它压根不会激活,连重启都救不了。











