必须安装的 devDependencies 是 @types/vscode、typescript、@typescript-eslint/eslint-plugin、@typescript-eslint/parser 和 eslint;其中 @types/vscode 是类型系统基石,版本须与 VS Code 引擎版本严格对齐,否则 API 无提示且编译报错。

vscode插件开发必须装的 devDependencies 是什么
不装 @types/vscode,TypeScript 编译直接报错——它不是可选依赖,是类型系统基石。其他依赖可以按需加,但这个漏了,vscode.window、vscode.commands 这些 API 就没智能提示,写代码像蒙眼摸鱼。
推荐初始化时就装全这组:
npm install -D @types/vscode typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint-
@types/vscode版本要和你本地 VS Code 的引擎版本对齐(查package.json里的"engines": {"vscode": "^1.109.0"},对应装@types/vscode@1.109) - ESLint 相关包不是必须,但没它们,
activate函数里随手写的console.log或未使用的变量,CI 会直接 fail
package.json 里 activationEvents 为空数组意味着什么
意味着插件「懒加载」:VS Code 启动时不激活,直到用户手动触发命令、打开特定文件、或执行某个事件才加载。这对性能友好,但新手常踩坑——改完 extension.ts 发现命令没反应,其实是插件根本没激活。
常见误操作和应对:
- 写了命令但没注册
activationEvents→ 用户点菜单/按快捷键时命令不可用;加一条"onCommand:my-extension.helloWorld"即可 - 想支持打开 .json 文件时自动激活 → 补
"onLanguage:json" - 完全不想自动激活(比如纯 UI 插件)→ 空数组没问题,但必须靠用户显式调用命令启动
extension.ts 的 activate 函数里,context.subscriptions.push 是干啥的
它是资源回收的关键开关。所有通过 VS Code API 创建的监听器、命令、状态栏项、Webview 等,都得用 context.subscriptions.push() 注册,否则插件停用时这些对象不会被释放,导致内存泄漏、重复注册、甚至跨窗口污染。
典型漏掉场景:
- 用
vscode.workspace.onDidChangeConfiguration监听配置变更,但没 push → 每次重载插件都会多一个监听器 - 注册多个命令,只 push 了第一个 → 后面的命令在 deactivate 后仍驻留内存
- 创建 WebviewPanel 后没 push → 关闭面板后 JS 上下文还在跑,CPU 占用异常
一句话:只要调用了返回 Disposable 类型的 API,就得 push。
中文语言包插件为什么不能靠 package.json 配置生效
因为中文语言包(如 Chinese (Simplified) Language Pack)本质是 VS Code 自身的本地化资源,不是普通扩展。它不走 activationEvents,也不执行 activate 函数,而是由 VS Code 主进程在启动早期加载。
所以你不能在自己插件里靠改 package.json 让界面变中文——必须让用户手动操作:
- 安装语言包插件
- 按
Ctrl+Shift+P输入Configure Display Language - 选
zh-cn并重启
如果你的插件需要显示中文文案,唯一可靠方式是:在 package.json 的 contributes.commands.title 等字段里直接写中文,或用 vscode.l10n API 加载本地化字符串(需额外配 package.nls.json)。别指望靠系统语言自动转换。


















