vsce publish失败主因是未登录或publisher不匹配;必须先vsce login获取token并确保package.json中publisher与Marketplace注册ID逐字符一致,同时main字段指向编译后JS文件、activationEvents按需声明。

vsce publish 报错:根本没登录就直接跑 publish
vsce publish 失败,十有八九卡在认证环节,而不是代码或配置问题。它不会明确告诉你“你没登录”,只会报 Failed to publish 或 Unauthorized。
- 必须先运行
vsce login,它会打开浏览器跳转到 Marketplace 授权页;授权完成后,token 才写入本地(路径类似~/.vscode/extensions/.vsce/token) - Windows 上用 PowerShell 运行
vsce login时,若提示脚本被禁止执行,需先执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -
vsce whoami可验证当前登录状态,输出 publisher ID 即表示已就绪
package.json 的 publisher 字段和 Marketplace 账户不一致
即使 vsce login 成功,publish 仍可能失败——因为 publisher 字段值必须和你在 Visual Studio Marketplace 注册的 publisher ID 完全一致(区分大小写、不能带空格或特殊字符)。
- 登录 Marketplace 后,在 Manage Publishers 页面确认你的 publisher ID(不是用户名、不是邮箱)
- 检查
package.json中的"publisher": "xxx",确保它和 Marketplace 显示的一模一样 - 如果改过 publisher,旧版本插件无法覆盖发布,必须删掉旧版本或换新 ID
F5 能跑但 vsce package 报错:main 字段指向错误路径
调试时 F5 正常,但 vsce package 提示找不到入口文件,通常是因为 main 字段仍指向 src/extension.ts,而 vsce 只认编译后的 JS 文件。
- TypeScript 项目中,
main必须是"main": "./out/extension.js",不是./src/extension.ts - 确保
npm run compile(或tsc)已成功执行,out/目录下存在extension.js和对应.d.ts - 如果用 pnpm,
pnpm build有时不触发编译,手动跑tsc -b更可靠
activationEvents 写错导致扩展在 Marketplace 不激活
用户安装后完全无反应,命令搜不到、图标不显示,大概率是 activationEvents 配置失效——尤其当你用 "*" 时,VSCode 2025 年底起已对非核心扩展静默降级为懒加载,不再保证启动即激活。
- 不要写
"activationEvents": ["*"],除非你真需要启动时就运行逻辑(比如监听全局事件) - 按实际使用场景声明,例如注册了
my-ext.insertTime命令,就写["onCommand:my-ext.insertTime"] - 多个触发条件用数组,如
["onCommand:my-ext.do", "onLanguage:json"],别漏引号、别拼错onCommand:前缀
main 指向、以及 activationEvents 是否被新版 VSCode 认可——这些点不验证清楚,打包再漂亮也没用。


















