vsce publish 失败的根本原因是 pat 未正确配置且 publisher 不匹配。必须通过 vsce login 获取 marketplace (manage) 权限的 pat,并确保 package.json 中 publisher 字符串与 marketplace 注册的发布者 id 完全一致(大小写、符号均敏感)。

vsce publish 失败和“没配 PAT”基本是同一件事,不是可选项,而是硬性门槛。
vsce login 是唯一合法登录方式,vsce publish 不会帮你补这一步
运行 vsce publish 报错时,VS Code Marketplace 并不关心你有没有 GitHub 账号、有没有登录微软账户,它只认 Azure DevOps 个人访问令牌(PAT)。而这个 token 必须通过 vsce login 显式注入,不能靠环境变量、配置文件或手动粘贴到命令行里蒙混过关。
-
vsce login会打开浏览器跳转到 Azure DevOps 授权页,选好组织后生成 token;手动填 token 字符串进终端是无效的 - 登录成功后终端会显示
You are now logged in as <publisher></publisher>,这个<publisher></publisher>必须和package.json中的publisher字段逐字符一致(大小写敏感) - token 缓存在本地凭证文件(如
~/.vscode/extensions/...),Windows 上用 PowerShell 运行时可能因执行策略被拦截,可临时运行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
PAT 权限必须勾选 Marketplace (Manage),其他都是次要的
在 dev.azure.com 创建 PAT 时,Scopes 列表里一堆选项,但对 vsce publish 起决定作用的只有 Marketplace 相关权限。
- 最低要求:勾选
Marketplace (Manage)—— 缺它必 401 - 如果插件依赖私有 Git 仓库(比如
git+ssh://...),还得额外勾选Code (Read) - 别勾
Full access:权限过大反而可能触发组织级策略拦截 - 生成后立刻复制 token,页面关闭后无法再次查看;别存成明文文件,建议用密码管理器
package.json 里 publisher 错一个字母,vsce 就当没这个人
即使 vsce login 成功、token 权限齐全,只要 package.json 中的 publisher 和 Marketplace 后台注册的发布者名不完全匹配,上传就会静默失败,错误信息通常是 Unauthorized 或 Publisher not found。
- 去 marketplace.visualstudio.com/manage 确认你注册的发布者 ID(不是邮箱,不是显示名,就是 URL 里的那一段)
- 检查
package.json中"publisher": "xxx"的值,确保大小写、连字符、数字全部一致 - 常见翻车点:把
myname写成MyName,或把vscode-ext写成vscode_ext - 改完记得重新运行
vsce login,否则旧缓存仍指向错误 publisher
真正卡住人的从来不是命令怎么输,而是 token 绑定的 publisher 和 package.json 里的 publisher 是否是同一个字符串——中间差一个空格、一个大小写,就等于两个不同的人在申请发布权限。











