Marketplace 发布
打包出 .vsix 只是本地产物,用户无法直接发现。把插件上传到 Visual Studio Marketplace,用户才能在扩展面板搜索并一键安装。发布的前提是拥有一个 Publisher(发布者)身份。
发布前置条件
发布一条扩展需要三样东西:
- 一个 Azure DevOps 组织
- 一个 Publisher 标识
- 一个具备 Marketplace Manage 权限的 Personal Access Token
三者之间的关系:Token 归属 Azure DevOps 组织下的用户,用户把 Token 授权给 Publisher,vsce 用 Token 替 Publisher 上传扩展。
创建 Publisher
1. 创建 Azure DevOps 组织
访问 dev.azure.com,用微软账号登录后创建组织:
https://dev.azure.com
New organization → 输入组织名(如 myvscodeext)→ 选择区域 → Continue组织名会成为后续 URL 的一部分:https://dev.azure.com/myvscodeext。组织可以免费创建,个人发布插件用它即可。
2. 创建 Publisher
在 VS Code Marketplace 管理页创建发布者:
https://marketplace.visualstudio.com/manage
Sign in → 选择组织 → New Publisher| 字段 | 说明 |
|---|---|
| Name | 发布者显示名,展示在插件页 |
| ID | 发布者唯一标识,写入 package.json 的 publisher 字段,创建后不可修改 |
ID 是插件的命名空间,插件全名是 发布者ID.插件名,例如 esbenp.prettier-vscode。ID 建议全小写、用连字符连接。
3. 生成 Personal Access Token
回到 Azure DevOps,进入用户设置生成令牌:
https://dev.azure.com/<组织名>/_usersSettings/tokens
Personal Access Tokens → New TokenName: vsce-publish
Organization: All accessible organizations
Scopes: Marketplace → Manage(勾选 Acquire/Manage)关键在权限范围:必须选择 Marketplace 下的 Manage(管理),vsce 才能代表 Publisher 上传与撤销扩展。只勾选 Code 或其他范围都无法发布。
4. 登录 vsce
复制 Token,在本机登录:
vsce login mypublisherhttps://marketplace.visualstudio.com/manage/publishers/
mypublisher
Personal Access Token: ****************************************************************
The Personal Access Token verification succeeded for the publisher 'mypublisher'.Token 只显示一次,复制后妥善保管。vsce 会把它写入本机配置文件,之后发布无需重复登录。
vsce publish 发布插件
vsce publish 会先执行打包再上传,一步完成:
vsce publish如果当前目录的 package.json 里 publisher 与 name 已正确填写,命令会:
- 运行
vscode:prepublish脚本编译 - 打包
.vsix - 上传到 Marketplace
- 输出插件访问链接
DONE Published mypublisher.my-extension@1.0.0
INFO Open https://marketplace.visualstudio.com/items?itemName=mypublisher.my-extension首次发布
首次发布与更新发布的命令相同,都是 vsce publish。区别在于:
- 首次发布:版本号从
0.0.1或1.0.0开始 - 更新发布:版本号必须递增,Marketplace 拒绝已存在的版本
指定版本发布
# 发布指定版本(不自动改 package.json)
vsce publish 1.2.0这条命令使用 1.2.0 作为扩展版本上传,但不会改写 package.json 的 version 字段,容易造成本地与线上版本脱节,日常更新更推荐用自动递增。
发布分支与仓库信息
vsce 会尝试从 git 获取分支与仓库信息生成链接:
vsce publish --githubBranch main--baseContentUrl 与 --baseImagesUrl 可指定 README 中相对图片的根地址,通常无需手动设置。
版本号语义化与自动递增
major.minor.patch
插件版本号遵循语义化版本(SemVer):major.minor.patch。
| 版本位 | 含义 | 示例 |
|---|---|---|
| major | 不兼容的破坏性变更 | 1.0.0 → 2.0.0 |
| minor | 向后兼容的新功能 | 1.0.0 → 1.1.0 |
| patch | 向后兼容的缺陷修复 | 1.0.0 → 1.0.1 |
vsce 自动递增
vsce publish 支持直接在命令里指定递增粒度,自动改写 package.json 并上传:
# 修复 bug:1.0.0 → 1.0.1
vsce publish patch
# 新增功能:1.0.0 → 1.1.0
vsce publish minor
# 破坏性变更:1.0.0 → 2.0.0
vsce publish major执行后 package.json 的 version 字段被同步更新,不会再出现版本漂移。
| 命令 | 效果 |
|---|---|
vsce publish patch | 递增最后一位并发布 |
vsce publish minor | 递增中间位,patch 清零 |
vsce publish major | 递增首位,其余清零 |
vsce publish 1.2.3 | 用指定版本发布,不改 package.json |
预发布版本
vsce publish 也接受带预发布标识的版本:
vsce publish 2.0.0-beta.1预发布版本面向内测用户,正式版发布前可先用它验证安装流程。
vsce unpublish 下架插件
下架已发布的扩展:
vsce unpublish mypublisher.my-extension强制下架
发布新版本后,旧版本不能再单独撤销,需要强制参数:
vsce unpublish mypublisher.my-extension --force--force 会删除该扩展的全部版本,包括市场展示页与所有统计数据,操作不可逆,谨慎使用。
下架场景
| 场景 | 处理 |
|---|---|
| 插件改名或迁移 | 发布新扩展,下架旧扩展 |
| 发现严重安全漏洞 | 立即下架止损,修复后以新版本重新发布 |
| 停止维护 | 下架或保留并标记 deprecated |
VS Code 的扩展管理页也支持网页端操作:进入 marketplace.visualstudio.com/manage,在扩展行点击 Unpublish 即可。
发布后的验证
检查市场展示
发布成功后:
https://marketplace.visualstudio.com/items?itemName=mypublisher.my-extension打开页面核对图标、描述、README 渲染与版本号。
本地安装验证
在干净的 VS Code 环境搜索插件并安装,确认激活、功能与卸载都正常:
Extensions → 搜索 mypublisher.my-extension → Install查看扩展信息
vsce show mypublisher.my-extension输出扩展名、版本、发布时间、安装量与评分统计。
发布常见错误
| 错误信息 | 原因 | 处理 |
|---|---|---|
publisher name doesn't exist | Publisher 未创建或 ID 拼写错误 | 在 Marketplace 管理页创建并核对 ID |
403 Forbidden | Token 权限不是 Marketplace Manage | 重新生成 Token 勾选 Manage |
version is already taken | 版本号已存在 | 递增版本号后重试 |
The extension is not compatible | engines.vscode 版本过低 | 提高 engines 中的版本 |
500: Internal Server Error | 上传内容含非法字符 | 检查 README 的 HTML 与图片链接 |
发布链路从 Azure DevOps 组织开始,到 Token 授权,再到 vsce publish 上传,每一步都对应一个明确的权限配置。版本号语义化与自动递增让每一次更新都有迹可循。