vscode本身不自动安装插件依赖,所谓“缺失依赖”实为插件项目未在package.json中显式声明npm包(如vscode、@vscode/codicons),需手动补全dependencies并执行npm install,再确保构建时正确打包进extension.js。

VSCode 本身不提供“自动发现并安装缺失插件依赖”的功能。所谓“缺失依赖”,通常指你手动开发的 VSCode 插件在运行时报错,例如 Cannot find module 'vscode' 或 Module not found: Error: Can't resolve '@vscode/codicons' —— 这些不是 VSCode 缺少插件,而是你的插件项目缺少对应 npm 包。
查 package.json 里的 dependencies 是否漏写
这是最常见也最容易忽略的源头。VSCode 插件是 Node.js 应用,所有第三方模块(包括 @vscode/codicons、glob、vscode-uri)都必须显式声明在 package.json 的 dependencies 字段中。
- 打开插件根目录下的
package.json - 检查
dependencies是否包含你在源码里import或require的所有包,尤其注意带@vscode/前缀的官方辅助库 - 如果用了 TypeScript,
vscode类型定义必须同时出现在dependencies(运行时需要)和devDependencies(编译需要),否则打包后会报找不到模块 - 别把
vscode当作全局变量——它不是内置 API,必须通过npm install vscode安装(注意:这个包仅用于类型和编译,实际运行由 VSCode 主进程注入)
运行时报 “Cannot find module” 但 package.json 已有?检查 node_modules 是否真装上了
VSCode 不会帮你执行 npm install,它只加载你构建好的插件包(extension.js 或 extension.ts 编译产物)。如果你跳过了安装步骤或用了错误的 Node 版本,node_modules 就是空的或不完整。
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
- 在插件根目录下执行
npm install(或yarn install),确保所有dependencies都被下载到node_modules/ - 确认
node_modules/vscode存在且非空(哪怕只是类型文件);node_modules/@vscode/codicons同理 - 如果用了 pnpm,注意它默认启用
shamefully-hoist可能导致某些包路径异常,建议加--no-verify或改用 npm/yarn - 构建前务必清理:删掉
node_modules和out/,再重新npm install && npm run compile
全局搜索 import/require 语句,反向验证是否漏装
与其等报错再补,不如主动扫描代码里所有引入点,逐个核对是否已在 package.json 中声明。
- 用 VSCode 全局搜索(
Ctrl+Shift+F)搜正则:import.*?from\s+["']([^"']+)["']|require\s*\(\s*["']([^"']+)["']\s*\) - 结果里过滤出第三方包名(排除以
./、../开头的相对路径,以及vscode这类平台内置但需声明的包) - 把每个匹配到的包名(如
@vscode/codicons、glob)跟package.json#dependencies对一遍,缺的立刻补上 - 特别注意动态 require:比如
require(someVar)或拼接字符串路径,depcheck 等工具无法识别,只能靠人工扫
为什么装了还报错?检查插件激活方式与打包路径
即使依赖全、node_modules 完整,也可能因构建配置错误导致最终 bundle 里没包含这些模块。
- 确认你用的是
webpack还是vscode-extension-pack默认的打包方式;如果是 webpack,检查externals是否误把vscode排除了(不该排除,它必须被当作普通依赖处理) - 查看生成的
extension.js文件,搜索require(或__webpack_require__,确认目标模块是否真的被打包进去了 - 如果用了
esbuild,确保platform: 'node'且external: ['vscode']是错的——vscode必须设为external: []或不设,否则运行时找不到 - 调试时启用
"type": "extensionHost"的 launch config,在断点处console.log(require.resolve('vscode')),看路径是否指向node_modules/vscode
真正卡住人的地方,往往不是“没装”,而是“装了但没打进包”或“装了但路径被 webpack 处理错了”。别只盯着 package.json 和终端报错,得一路追到最终生成的 JS 文件里去验证模块是否存在。










