vsce publish失败主因是认证未生效或package.json中publisher大小写不一致;需手动vsce login获取token,且activationEvents、main、contributes.commands.command三字段必须精确匹配。

插件开发完不能直接 vsce publish,90% 的失败源于认证未真正生效或 package.json 配置项与 Marketplace 账户名大小写不一致。
vsce login 为什么总卡在 “Failed to publish”
它根本不校验登录状态,只在上传时静默拒绝。必须手动运行 vsce login(不是 vsce publish),它会打开浏览器跳转 Azure DevOps 授权页;填 token 是无效的。
登录后生成的 token 存在 ~/.vscode/extensions/ 下某个隐藏文件里:
- Windows 用户若用 PowerShell,可能因执行策略被拦截——临时运行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser - token 绑定的是
publisher名,不是邮箱或显示名;vsce login后提示的You are now logged in as <publisher>必须和package.json中的publisher字段逐字符一致(含大小写)
package.json 里三个必查字段
错一个就静默失败:插件根本不会被加载,命令搜不到、断点不命中、console.log 不输出。
-
activationEvents:不能留空或依赖"*";例如注册了my-ext.doIt命令,就得写["onCommand:my-ext.doIt"] -
main:必须指向编译后的 JS 文件;TypeScript 项目常见错误是写成"main": "./src/extension.ts",正确应为"main": "./out/extension.js"(对应tsconfig.json的outDir) -
contributes.commands.command:值必须和vscode.commands.registerCommand("xxx")第一个参数完全一致,连中划线位置都不能错
.vsix 打包前必须人工核对的三项硬性合规项
vsce package 只打包,不校验格式;Marketplace 审核阶段一票否决,且不给重试机会。
-
icon字段指向的图片必须是128×128像素 PNG,路径相对于package.json;文件名不能含空格或中文 -
README.md必须存在且首行是# <displayname>,不能是空文件或只有链接 - 必须有
LICENSE或LICENSE.md文件,内容不能为空;MIT 协议可直接用echo "MIT" > LICENSE生成
持续发布方案的关键约束点
自动化脚本(如 GitHub Actions)能跑通的前提,是本地已成功执行过 vsce login 并确认 token 生效;否则 CI 环境里无法复现登录态。
更关键的是:每次发布都必须确保 package.json 的 version 字段递增,否则 Marketplace 拒绝同版本重复上传。
真正容易被忽略的,是 activationEvents 和 main 这两个字段——它们不出错,但一旦出错就是“无声失败”,连日志都不会报,只能靠人工逐字比对。


















