vsix-publish · diff
git:20260415.0a988da to git:20261015.c21ad69
18 added, 289 removed. Audit A to A.
---
name: vsix-publish
- description: "VSCode 扩展 (.vsix) 发布知识库与自动化指南。当用户需要发布 VSCode 插件、配置 vsce 自动化发布、解决 VSCode Marketplace PAT 问题、创建 Personal Access Token 时触发。关键词:vsix publish、发布 VSCode 插件、vsce publish、VSCode Marketplace、Open VSX、PAT token。"
- ---
-
- <role>
- 你是 VSCode 扩展发布顾问,帮助用户完成 VSCode 插件的发布流程,从手动发布到自动化发布一站式指导。
- </role>
-
- <purpose>
- 作为 VSIX 发布的知识库,提供两种发布方式的完整指引:手动发布和自动化发布(CI/CD),覆盖 VSCode Marketplace 和 Open VSX Registry。
- </purpose>
-
- <trigger>
- ```text
- vsix publish
- 发布 VSCode 插件
- vsce publish
- VSCode Marketplace
- 发布 vsix
- 发布 VSCode 扩展
- publish vscode extension
- Open VSX
- ovsx publish
- 发布插件到市场
- ```
- </trigger>
-
- ---
-
- # VSIX 发布指南
-
- ## 快速判断
-
- 先确认用户当前状态:
-
- ```bash
- # 检查 vsce 是否已安装
- npx vsce --version 2>&1
-
- # 检查项目是否为 VSCode 扩展
- cat package.json | grep -E '"name"|"version"|"publisher"|"engines"'
-
- # 检查是否已有 Personal Access Token 配置
- cat ~/.vsce 2>/dev/null
- ```
-
- ### PAT 获取策略
-
- 发布需要 `VSCE_PAT`(VSCode Marketplace)和 `OVSX_PAT`(Open VSX),按以下优先级获取:
-
- 1. **读取 CLAUDE.md 配置变量**(推荐,一次配置永久使用)
-
- 检查全局 CLAUDE.md 中的 Skills 配置变量表:
- - `VSCE_PAT`:VSCode Marketplace 发布令牌(Azure DevOps PAT)
- - `OVSX_PAT`:Open VSX Registry 发布令牌
-
- 如已配置,直接使用,无需再次登录。
-
- 2. **CLAUDE.md 未配置 → 引导用户输入**
-
- 使用 AskUserQuestion 询问:
- > "检测到未配置 VSCE_PAT / OVSX_PAT。是否现在配置到全局 CLAUDE.md?配置后后续发布无需重复输入。"
-
- 引导流程:
- - **VSCE_PAT**:前往 [Azure DevOps](https://dev.azure.com) → 头像 → Personal access tokens → New Token
- - Organization: All accessible organizations
- - Scopes: Marketplace → **Manage**
- - **OVSX_PAT**:前往 [open-vsx.org](https://open-vsx.org) → 登录 → Settings → Access Tokens → Create Token
-
- 获取后写入 CLAUDE.md Skills 配置变量表。
-
- 3. **用户拒绝写入 CLAUDE.md → 临时使用**
-
- 通过 `vsce login <publisher>` 存入 `~/.vsce`,仅当次会话有效。
-
- 根据结果引导用户进入对应流程:
- - **未安装 vsce** → `npm install -g @vscode/vsce`
- - **未配置 PAT** → 引导上述 PAT 获取流程
- - **已配置 PAT** → 直接执行 [发布命令](#发布命令)
- - **想配置 CI/CD** → 引导 [自动化发布配置](#自动化发布配置推荐)
-
- ---
-
- ## Reference
-
- ### [手动发布](reference/manual-publish.md)
-
- 适合偶尔发布、首次发布的用户。通过 `vsce` CLI 手动打包并发布到 VSCode Marketplace。
-
- ### [自动化发布配置](reference/auto-publish.md)(推荐)
-
- 适合需要流水线发布的用户。通过 GitHub Actions + PAT 实现自动发布,支持 VSCode Marketplace 和 Open VSX Registry。
-
- ---
-
- ## 发布命令
-
- ### 使用 CLAUDE.md 中的 PAT 发布(推荐)
-
- 当 CLAUDE.md 已配置 `VSCE_PAT` 和 `OVSX_PAT` 时,直接通过环境变量发布:
-
- ```bash
- # 发布到 VSCode Marketplace
- VSCE_PAT="<从 CLAUDE.md 读取>" npx vsce publish
-
- # 发布到 Open VSX Registry
- OVSX_PAT="<从 CLAUDE.md 读取>" npx ovsx publish --no-dependencies
-
- # 同时发布到两个平台
- VSCE_PAT="<从 CLAUDE.md 读取>" npx vsce publish && OVSX_PAT="<从 CLAUDE.md 读取>" npx ovsx publish --no-dependencies
- ```
-
- > **注意**:通过环境变量传递 PAT 时,不需要先执行 `vsce login`,vsce 会优先使用环境变量。
-
- ### 手动一键发布(已通过 vsce login 登录)
-
- ```bash
- # 完整流程:验证 → 打包 → 发布
- npx vsce package && npx vsce publish
- ```
-
- ### 分步执行
-
- ```bash
- # 1. 验证扩展
- npx vsce package --allow-missing-repository # 先试打包,检查是否有问题
-
- # 2. 本地测试 vsix
- code --install-extension *.vsix
-
- # 3. 升版本号(在 package.json 中手动修改,或使用 vsce)
- npx vsce publish patch # 1.0.0 → 1.0.1,自动 git commit + tag + publish
- npx vsce publish minor # 1.0.0 → 1.1.0
- npx vsce publish major # 1.0.0 → 2.0.0
-
- # 4. 仅打包(不发布)
- npx vsce package
-
- # 5. 发布已有 vsix
- npx vsce publish --packagePath my-extension-1.0.0.vsix
- ```
-
- ### 多平台发布
-
- ```bash
- # 同时发布到 VSCode Marketplace 和 Open VSX Registry
- npx vsce publish && npx ovsx publish --no-dependencies
- ```
-
- > **注意**:Open VSX 需要 `--no-dependencies`,否则会尝试安装 devDependencies 导致失败。
-
- ### 关键配置检查
-
- 发布前必须确认 `package.json` 中包含:
-
- ```json
- {
- "name": "extension-name",
- "displayName": "扩展显示名",
- "version": "1.0.0",
- "publisher": "你的Publisher ID",
- "engines": {
- "vscode": "^1.80.0"
- },
- "categories": ["Other"],
- "repository": {
- "type": "git",
- "url": "https://github.com/user/repo.git"
- },
- "vsce": {
- "dependencies": false
- },
- "ovsx": {
- "dependencies": false
- }
- }
- ```
-
- > **重要**:
- > - `publisher` 字段必须与 VSCode Marketplace 注册的 Publisher ID 一致,否则发布会失败
- > - `vsce.dependencies: false` 排除 devDependencies,减小 vsix 包体积
- > - `ovsx.dependencies: false` 同理,Open VSX 也需要
-
- #### VSCode Marketplace 支持的 categories
-
- `categories` 字段决定扩展在 Marketplace 中的分类,必须使用以下官方值:
-
- | 分类 | 说明 |
- |------|------|
- | `Programming Languages` | 编程语言支持 |
- | `Snippets` | 代码片段 |
- | `Themes` | 主题 |
- | `Debuggers` | 调试器 |
- | `Formatters` | 格式化工具 |
- | `Linters` | 代码检查 |
- | `SCM Providers` | 源代码管理 |
- | `Other` | 其他(默认) |
- | `Extension Packs` | 扩展包 |
- | `Language Packs` | 语言包 |
- | `Data Science` | 数据科学 |
- | `Machine Learning` | 机器学习 |
- | `Visualization` | 可视化 |
- | `Notebooks` | 笔记本 |
- | `Education` | 教育 |
- | `Testing` | 测试 |
-
- > 可同时设置多个分类:`"categories": ["Programming Languages", "Snippets"]`
-
- ### .vscodeignore(必须配置)
-
- 控制哪些文件不进入 vsix 包,避免打包源码和开发文件:
-
- ```
- .vscode/**
- .vscode-test/**
- out/**
- node_modules/**
- src/**
- .gitignore
- webpack.config.js
- vsc-extension-quickstart.md
- **/tsconfig.json
- **/.eslintrc.json
- **/*.map
- **/*.ts
- **/.vscode-test.*
- ```
-
- > **原则**:只保留运行时需要的文件(编译产物 `dist/`、`package.json`、`README.md`、`CHANGELOG.md`、icon 等)。
-
- ### vscode:prepublish 脚本
-
- `vsce publish` 会自动执行 `vscode:prepublish` 脚本,确保发布前自动构建:
-
- ```json
- {
- "scripts": {
- "vscode:prepublish": "pnpm run package",
- "build": "webpack --mode production --devtool hidden-source-map",
- "package:vsix": "vsce package",
- "publish:vsce": "vsce publish",
- "publish:ovsx": "ovsx publish --no-dependencies",
- "publish:all": "pnpm run publish:vsce && pnpm run publish:ovsx",
- "deploy": "pnpm run build && pnpm run publish:all"
- }
- }
- ```
-
- > **注意**:`ovsx publish` 需要 `--no-dependencies` 标志,因为 Open VSX 不会自动跳过 devDependencies。
-
- ### 包管理器支持
-
- | 包管理器 | 安装 vsce | 打包命令 |
- |----------|----------|----------|
- | **npm** | `npm install -g @vscode/vsce` | `npx vsce package` |
- | **pnpm** | `pnpm add -g @vscode/vsce` | `pnpm run package:vsix` |
- | **yarn** | `yarn global add @vscode/vsce` | `yarn vsce package` |
-
+ description: "VS Code 扩展发布兼容入口:打包与发布 VSIX、配置 Marketplace/Open VSX 自动发布、排查认证及发布失败时,加载 release-ops 对应平台操作并分别维护证据。"
---
- ## 常见错误
-
- | 错误 | 原因 | 解决 |
- |------|------|------|
- | `Missing publisher name` | package.json 缺少 publisher 字段 | 添加 `"publisher": "你的ID"` |
- | `Publisher not found` | Publisher ID 未在 Marketplace 注册 | 前往 [marketplace.visualstudio.com](https://marketplace.visualstudio.com/) 注册 |
- | `Unauthorized` | PAT 无效或过期 | 重新生成 Personal Access Token |
- | `Extension already exists` | 版本号已发布 | 升版本号后重试 |
- | `Missing repository` | package.json 缺少 repository 字段 | 添加 repository 配置,或使用 `--allow-missing-repository` |
- | `Invalid icon` | icon 路径错误或格式不支持 | 检查 icon 路径,使用 PNG 格式 |
- | `ENOENT: no such file` | .vsix 文件路径错误 | 使用 `--packagePath` 指定正确路径 |
- | `vsce command not found` | 未安装 vsce | `npm install -g @vscode/vsce` |
- | `Pat token scope error` | PAT 权限不足 | 确保勾选 **Marketplace > Manage** 权限 |
-
- ---
+ # 扩展发布入口
- ## 交互式引导
+ 保留原调用名称,平台知识由 release-ops 统一维护;vsce、ovsx 与项目脚本提供执行能力。
- 当用户不确定如何操作时,使用 AskUserQuestion 引导:
+ ## 前置依赖与平台选择
- ### 情况 1:用户首次发布 VSCode 扩展
+ 从当前技能目录或注册表定位并读取 `release-ops/SKILL.md`,只加载实际目标:
- 1. 确认项目有 `package.json` 且包含 `name`、`version`、`publisher`、`engines.vscode`
- 2. 引导注册 Publisher(如未注册)
- 3. 引导创建 Personal Access Token
- 4. 使用 `vsce login <publisher>` 登录
- 5. 执行 `vsce publish`
+ | 目标 | 平台档案和 operation |
+ | --- | --- |
+ | VS Code Marketplace | `references/platforms/vscode-marketplace/index.md` 及 `operations/publish-extension.md` |
+ | Open VSX | `references/platforms/open-vsx/index.md` 及 `operations/publish-extension.md` |
+ | GitHub Release 仅分发 VSIX | `references/platforms/github/index.md` 及 `operations/publish-release.md` |
- ### 情况 2:用户遇到 PAT/认证问题
+ 安装 Agent 应同时安装仓库 `harness/release-ops` 并读取其安装提示词。单独 Plugin 不保证包含该独立依赖;缺失时说明并通过当前技能管理器补装。尚不可读时继续目标与项目配置盘点,不跳过前置执行发布。
- 1. 解释原因:VSCode Marketplace 使用 Azure DevOps PAT 进行认证
- 2. 引导用户前往 Azure DevOps 创建新 PAT
- 3. 使用 `vsce login <publisher>` 重新登录
- 4. 验证后执行发布
+ ## 执行与写回
- ### 情况 3:用户想配置 CI/CD 自动发布
+ - 明确 publisher/namespace、扩展、版本、目标架构和渠道,复用与源码相符的 VSIX。
+ - 只打包时执行项目打包目标,不升级为发布;打包、发布、安装验证是不同动作。
+ - 认证采用项目实际且当前支持的方式,不从 AGENTS/CLAUDE 文档读取或写入 PAT。依赖收集按 bundling 和实际运行依赖决定,不统一添加 `--no-dependencies`。
+ - 多平台分别检查结果,不能用一端成功替代另一端;仅恢复缺失目标。
+ - 沿用当前授权及有效检查证据,完成/失败后按 release-ops 写回平台经验与私有实例。
- 1. 引导创建 PAT(需勾选 Marketplace > Manage 权限)
- 2. 将 PAT 存入 GitHub Secrets (`VSCE_PAT` / `OVSX_PAT`)
- 3. 创建 `.github/workflows/vsix-publish.yml`
+ 兼容参考:[手动发布入口](reference/manual-publish.md)、[自动发布入口](reference/auto-publish.md)。