vscode插件发布前必须先vsce package打包成.vsix,否则vsce publish会静默失败;常见错误是main字段指向的"./out/extension.js"不存在,需先编译typescript或检查webpack输出路径、.vscodeignore是否误删构建目录。

插件开发完不能直接发到市场,必须先 vsce package 打包成 .vsix,否则 vsce publish 会静默失败或报错“Publisher not found”——这不是网络问题,是校验流程卡在本地。
vsce package 报错 “Cannot find module './out/extension.js'” 怎么办
这是最常踩的坑:TypeScript 源码没编译,vsce package 却默认去 out/ 目录找入口文件。
- 先确认
package.json中main字段指向的路径(如"main": "./out/extension.js")是否真实存在 - 运行
npm run compile或npm run vscode:prepublish(脚手架生成的项目通常自带这两个 script) - 如果用了
webpack打包,确保webpack.config.js的output.path和main字段一致,且entry指向的是已编译的 JS(不是.ts) - 检查
.vscodeignore是否误删了out/或dist/目录 —— 默认规则会排除src/,但不会自动保留构建产物
vsce publish 失败提示 “Unauthorized” 或 “Publisher not found”
根本原因不是 token 过期,而是身份绑定不匹配:VS Code Marketplace 要求 publisher 名称、Azure PAT 权限、package.json 三者严格一致。
- 登录前,必须先在 marketplace.visualstudio.com/manage 创建 publisher,记下注册时填的**全小写名称**(大小写敏感)
-
package.json中的publisher字段必须与之完全相同,比如注册的是myorg,就不能写成MyOrg或my-org - 生成 Azure PAT 时,Scopes 至少勾选
Marketplace (Manage);如果插件依赖私有 Git 仓库,还得加Code (Read) - 首次运行
vsce login后,token 会缓存在~/.vscode/extensions/下的凭证文件里,后续不用重复输 —— 但换机器或重装系统就得重登
如何部署到私有源(离线环境或企业内网)
私有部署不走 Marketplace,核心是绕过 vsce publish,改用本地分发 + 手动安装机制。
- 打包后得到
my-extension-0.1.0.vsix,直接复制到目标机器(U 盘、内网 FTP、共享目录均可) - 用户在 VS Code 中执行
Extensions: Install from VSIX命令,选中该文件即可安装 - 若需批量部署,可将
.vsix放入内部 HTTP 服务(如 Nginx),然后用code --install-extension http://intranet/vscode/my-extension-0.1.0.vsix命令行静默安装 - 注意:私有源无法自动更新,版本管理靠人工替换
.vsix文件 + 修改package.json中的version字段
真正容易被忽略的是 activationEvents 配置 —— 即使打包发布成功,如果它写得太窄(比如只写 onCommand:myext.doSomething),而用户没手动触发命令,插件就永远不会激活,表现就是“装了等于没装”。调试阶段建议临时设为 *,上线前再收紧。这个细节在日志里几乎不报错,只能靠手动验证行为。











