publisher 和 engines.vscode 是 manifest.json 必填字段:publisher 必须为已验证的 marketplace 账户名,engines.vscode 格式须为 "^1.80.0" 等语义化版本号。

插件 manifest.json 必须包含哪些字段
VSCode 市场拒绝发布最常见原因就是 package.json(即插件的 manifest)缺关键字段。它不是普通 npm 包,必须显式声明 VSCode 相关元信息。
以下字段缺一不可,且大小写、拼写必须完全匹配:
-
publisher:必须是已验证的 VSCode Marketplace 账户名(不是邮箱),且与你登录 publisher 账户一致 -
engines.vscode:格式如"^1.80.0",不能写成=1.80.0"或留空;建议用^兼容小版本升级 -
categories:至少一个字符串数组项,例如["Programming Languages", "Snippets"];值必须来自官方枚举列表,"Other"不被接受 -
activationEvents:即使插件是“按需激活”,也不能省略;空数组[]或合理事件(如"onCommand:myext.doSomething")都可,但不能删掉该字段
图标和预览图尺寸、格式是否合规
市场审核会自动检查资源文件,尺寸不符或格式错误会导致静默失败——上传成功但不显示在搜索结果中。
必须满足:
-
icon字段指向的 PNG 文件:严格为128x128px,无透明边框,背景纯白(#FFFFFF),文件大小 ≤ 256KB -
galleryBanner中的color和theme:前者是十六进制色值(如"#007acc"),后者只能是"dark"或"light",不能拼错 - 预览图(
images数组中的url):必须是 HTTPS 链接,图片尺寸推荐1920x1080px(横屏),比例 16:9;JPG/PNG/GIF 均可,但 GIF 不支持动画播放
打包前没清理 node_modules 和 dev 依赖导致体积超标
VSCode 市场对单个插件包大小硬性限制是 50MB,超限直接拒收。很多插件因为未排除 node_modules 或误将 webpack、typescript 等开发依赖打进 vsix,瞬间突破 30MB。
正确做法:
- 用
vsce package --no-yarn打包(避免 yarn.lock 干扰),并确认当前目录下没有残留node_modules - 在
package.json的scripts.package中加入清理步骤:"rm -rf node_modules && npm ci --only=production && vsce package"(Windows 用户改用rimraf) - 检查
package.json的dependencies是否只含运行时必需模块;devDependencies绝对不能出现在最终 vsix 里 - 用
unzip -l your-extension-1.0.0.vsix | head -20快速查看包内最大文件,定位臃肿来源
本地测试没覆盖 activationEvents 触发路径
插件在市场通过了静态检查,但用户安装后“点不开”“命令不出现”,大概率是 activationEvents 和实际代码注册不匹配。VSCode 不会主动加载你的扩展,除非某个事件被触发且你声明了监听。
典型断裂点:
- 声明了
"onLanguage:python",但插件实际只处理.py文件,而用户打开的是requirements.txt(属于plaintext语言) - 用了
"onView:myCustomView",但package.json里漏写了contributes.views对应配置 - 命令注册在
activate()里,但activationEvents写成了"*"—— 这看似万能,实则拖慢启动,且被市场推荐为反模式 - 调试时用
F5启动 Extension Development Host,务必手动触发一次你声明的事件(比如打开对应类型文件、执行命令、切换到对应视图),再看控制台是否有Extension host terminated unexpectedly类错误
真正麻烦的不是功能写错,而是“它根本没跑起来”。发布前花两分钟模拟用户首次使用路径,比后期收一堆“插件没反应”的反馈要省力得多。











