vsce package 失败因未构建:需先运行 yarn build 等构建命令生成 out/ 目录;vsce login 失败多因 publisher id 错误或 token 权限不足;vsce recommend 依赖 package.json 等元数据;本地安装 .vsix 不生效常因 engines.code 版本不匹配。

vsce package 打包失败:先确认构建是否完成
直接运行 vsce package 却报错“Cannot find module './out/extension.js'”或提示缺少 out/ 目录?这不是 vsce 的问题,而是你跳过了构建步骤。vsce 只负责把已编译好的产物打包成 .vsix,它不编译 TypeScript、不运行 webpack。
- 必须先执行项目定义的构建命令,比如
yarn build或npm run build-extension(具体看package.json中的scripts) - 检查输出目录是否存在且非空:
ls -la out/;常见错误是误删out/后没重构建,或webpack.config.ts输出路径配错 - TypeScript 项目务必确保
tsconfig.json的"outDir"和 webpack 配置一致,否则 vsce 找不到入口文件
vsce login 认证失败:令牌权限和发布者名称要严格匹配
执行 vsce login my-publisher 后输入 token 却提示 “Invalid publisher”,大概率是发布者名称写错了——它不是你的用户名,也不是邮箱,而是你在 Visual Studio Marketplace 上创建的 publisher ID(例如 my-company),且大小写敏感。
- 登录 marketplace.visualstudio.com/manage/publishers,在「Publishers」页确认你拥有的 publisher ID
- 生成 Personal Access Token 时,scope 必须勾选
Manage extensions和Publish extensions;仅勾选Read权限会导致后续vsce publish被拒 - token 本身不能带空格或换行;粘贴时注意终端是否自动截断(尤其用 iTerm 或 Windows Terminal)
vsce recommend 不输出插件:语言标识和依赖分析有前提
vsce recommend --language=typescript 返回空或只有几个通用插件?说明 vsce 没能从当前项目识别出有效上下文。它不是靠文件后缀猜,而是读取 package.json、tsconfig.json 等元数据做匹配。
- 项目根目录下必须存在
package.json,且含"type": "module"或"engines": {"node": ">=18.0.0"}等明确字段 - 若用 pnpm,需确保
node_modules已安装(vsce recommend会扫描devDependencies中的工具链,如eslint→ 推荐dbaeumer.vscode-eslint) - 不支持从
yarn.lock或pnpm-lock.yaml反推插件;如果项目没锁文件或没装依赖,推荐结果基本不可靠
本地安装 .vsix 却不生效:VS Code 版本与 engine 兼容性被忽略
用 code --install-extension my-ext.vsix 安装成功,但重启后插件没出现、命令不可用,甚至控制台报 Extension 'xxx' is not compatible with Code '1.85.0' ——这是 package.json 里 "engines" 字段和你本地 VS Code 版本不匹配。
- 查看你的 VS Code 版本:
code --version(注意不是vscode --version) - 检查扩展的
package.json中"engines.code"值,例如"^1.90.0"表示最低要求 VS Code 1.90;低于该版本将静默禁用 - 开发调试阶段建议设为宽松范围,如
"^1.75.0",避免团队成员因 VS Code 小版本差异导致无法加载
最常被绕开的一点:vsce 不校验 engines.code 是否合理,它只认字段存在就打包。这个兼容性坑,得你自己在 package.json 里写对,并在目标环境实测。











