大家好,我是不如摸鱼去,wot-ui 的"主理人",欢迎来到我的心得分享专栏。
wot-ui 是当下最流行的 uni-app vue3 组件库之一。
在文章 wot-ui 组件库 1.13.0 发布:组件、文档双优化,配套设施更齐全!中我们曾经提到,为了进一步提升开发体验,WotUI 1.13 版本推出了专门的 VSCode 插件,为开发者提供更智能的代码编写支持,今天我们来聊一聊 wot-ui intellisense 以及它是如何实现 VSCode 插件的自动化发布的。

wot-ui intellisense
wot-ui intellisense 是一个为 Wot UI 组件库提供智能代码提示的 VSCode 插件,由 Wot UI 团队成员百友提供,它具备以下特性:
- 🎯 为 80+ 个 Wot UI 组件提供智能代码补全
- 🚀 支持组件标签、属性、事件的智能提示
- 💪 支持短横线式(kebab-case)命名方式
- 📖 悬停显示组件和属性的详细文档说明
- 🔍 支持动态属性(:prop)和事件(@event)绑定补全
- 🛡️ 提供组件属性值验证和错误诊断功能
- 📄 支持 Vue 和 HTML 文件
这个插件可以让你在使用 wot-ui 时如虎添翼。
为什么要提供 VSCode 插件?
其实当前 wot-ui 对 typescript 的支持其实还不错,在不使用 wot-ui intellisense 插件的情况下,也可以结合 VSCode + Volar 实现代码提示,不过 Volar 经常出现问题,导致代码提示时灵时不灵,所以 wot-ui intellisense 可以解决 Volar 出问题时代码提示失灵的问题。
还有就是 VSCode 插件更加自由,可以做到更多事情,比如跳转到文档地址、展示详细文档介绍等,相对 Volar 来说能够给开发者提供更大的便利。
VSCode 插件自动化发布
开发 wot-ui intellisense 插件时,我们一开始是手动发布的,不仅效率低下,还容易因为人为操作失误导致发布失败。因此,我们使用 GitHub Actions 来实现自动化发布,来解决发布工程化问题。
自动化发布的优势
自动化发布带来了以下显著优势:
- 一致性保证:每次发布都遵循相同的流程,避免人为差异
- 效率提升:从代码提交到插件上架全程自动化,节省大量时间
- 错误减少:自动化测试和验证环节大大降低了发布失败的概率
- 版本追溯:完整的发布记录便于问题定位和版本回滚
- 团队协作:多人协作开发时,统一的发布流程减少冲突
创建 VScode 插件发布的 Token
注册并登录到:https://dev.azure.com/,创建对应的组织后按下图操作点击。

点击创建发布 Token,并保存。

GitHub Action
我们计划使用HaaLeo/publish-vscode-extension@v2实现结合GitHub Action发布插件。
GitHub Action 是什么?
GitHub Action是GitHub提供的持续集成和持续部署(CI/CD)平台,它允许开发者自动化软件开发工作流程。简单来说,它可以在特定事件发生时(如代码推送、创建标签等)自动执行预定义的任务。
主要特点:
- 🔄 事件驱动:可以监听代码推送、Pull Request、Issue创建等GitHub事件
- 📝 工作流配置:通过YAML文件定义自动化任务
- 🚀 云端执行:在GitHub提供的虚拟机环境中运行任务
- 🔧 丰富的生态:拥有大量的预构建Action,可以快速集成各种工具
配置 GitHub Action 实现自动化发布
在 GitHub 项目的 Settings -> Secrets 路径下配置命名为 VS_MARKETPLACE_TOKEN 密钥,内容为之前创建的 VSCode 插件发布 Token。
在项目根目录下创建.github文件夹,.github中创建workflows文件夹并创建文件deploy.yml,内容如下:
            
            
              yml
              
              
            
          
          name: Deploy Extension
on:
  push:
    tags:
      - "*"
  workflow_dispatch:
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - name: Publish to Visual Studio Marketplace
        uses: HaaLeo/publish-vscode-extension@v2
        with:
          pat: ${{ secrets.VS_MARKETPLACE_TOKEN }}
          registryUrl: https://marketplace.visualstudio.com然后我们就可以通过推送 tag 或者手动触发的方式来发布插件了!

支持 Trae、Cursor 等
当下已经是 AI 编程的时代了,众多基于 VSCode 的 AI 编程工具层出不穷,而 Visual Studio Marketplace 的使用条款禁止非微软官方分支(如 Trae、Cursor 等)直接调用其插件服务,所以我们可以发布到开放的 VS Code 插件注册中心,例如: OpenVSX。
我们在 https://open-vsx.org/ 注册并登录后获取到其发布 token 后并保存(访问https://open-vsx.org/user-settings/tokens获取)。
然后更新 deploy.yml,补充发布到 openvsx 的逻辑和发布成功信息等
            
            
              yml
              
              
            
          
          name: Deploy Extension
on:
  push:
    tags:
      - "*"
  workflow_dispatch:
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: 'npm'
      - name: Install dependencies
        run: npm ci
      - name: Publish to Open VSX Registry
        uses: HaaLeo/publish-vscode-extension@v2
        id: publishToOpenVSX
        with:
          pat: ${{ secrets.OPEN_VSX_TOKEN }}
          skipDuplicate: true
          dependencies: true
        continue-on-error: true
      - name: Publish to Visual Studio Marketplace
        uses: HaaLeo/publish-vscode-extension@v2
        id: publishToVSMarketplace
        with:
          pat: ${{ secrets.VS_MARKETPLACE_TOKEN }}
          registryUrl: https://marketplace.visualstudio.com
          extensionFile: ${{ steps.publishToOpenVSX.outputs.vsixPath }}
          skipDuplicate: true
        continue-on-error: true
      - name: Check deployment results
        run: |
          echo "OpenVSX deployment: ${{ steps.publishToOpenVSX.outcome }}"
          echo "VS Marketplace deployment: ${{ steps.publishToVSMarketplace.outcome }}"
          
          if [[ "${{ steps.publishToOpenVSX.outputs.vsixPath }}" != "" ]]; then
            echo "VSIX file created: ${{ steps.publishToOpenVSX.outputs.vsixPath }}"
          fi
          
          if [[ "${{ steps.publishToOpenVSX.outcome }}" == "failure" && "${{ steps.publishToVSMarketplace.outcome }}" == "failure" ]]; then
            echo "❌ Both deployments failed!"
            exit 1
          elif [[ "${{ steps.publishToOpenVSX.outcome }}" == "failure" ]]; then
            echo "⚠️ OpenVSX deployment failed, but VS Marketplace succeeded"
          elif [[ "${{ steps.publishToVSMarketplace.outcome }}" == "failure" ]]; then
            echo "⚠️ VS Marketplace deployment failed, but OpenVSX succeeded"
          else
            echo "✅ Both deployments succeeded!"
          fi
      - name: Create deployment summary
        if: always()
        run: |
          echo "## 🚀 Extension Deployment Summary" >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          echo "| Registry | Status | Details |" >> $GITHUB_STEP_SUMMARY
          echo "|----------|--------|---------|" >> $GITHUB_STEP_SUMMARY
          echo "| 🌐 Open VSX Registry | ${{ steps.publishToOpenVSX.outcome == 'success' && '✅ Success' || '❌ Failed' }} | ${{ steps.publishToOpenVSX.outcome == 'success' && 'Published successfully' || 'Check logs for details' }} |" >> $GITHUB_STEP_SUMMARY
          echo "| 🏪 Visual Studio Marketplace | ${{ steps.publishToVSMarketplace.outcome == 'success' && '✅ Success' || '❌ Failed' }} | ${{ steps.publishToVSMarketplace.outcome == 'success' && 'Published successfully' || 'Check logs for details' }} |" >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          if [[ "${{ steps.publishToOpenVSX.outputs.vsixPath }}" != "" ]]; then
            echo "📦 **VSIX File**: \`${{ steps.publishToOpenVSX.outputs.vsixPath }}\`" >> $GITHUB_STEP_SUMMARY
          fi
          echo "" >> $GITHUB_STEP_SUMMARY
          echo "### 📋 Configuration Used" >> $GITHUB_STEP_SUMMARY
          echo "- **Skip Duplicate**: ✅ Enabled" >> $GITHUB_STEP_SUMMARY
          echo "- **Dependencies Check**: ✅ Enabled" >> $GITHUB_STEP_SUMMARY
          echo "- **Shared VSIX**: ✅ Same file used for both registries" >> $GITHUB_STEP_SUMMARY验证
我们可以在 VSCode 和 Trae 的插件市场中搜索 wot-ui 可以看到以下效果。


集成
目前 wot-starter 已默认集成 wot-ui intellisense 插件,可以参考:https://github.com/wot-ui/wot-starter/blob/f754f8b2e3062840f024dc870ec20d9c63f92576/.vscode/extensions.json#L11
            
            
              json
              
              
            
          
          // wot-starter/.vscode/extensions.json
{
  "recommendations": [
    "antfu.vite",
    "antfu.iconify",
    "antfu.unocss",
    "vue.volar",
    "dbaeumer.vscode-eslint",
    "editorConfig.editorConfig",
    "uni-helper.uni-helper-vscode",
    "alova.alova-vscode-extension",
    "wot-ui.wot-ui-intellisense"
  ]
}总结
我们从 wot-ui 实际场景出发,介绍了我们团队开发 VSCode 插件 wot-ui intellisense 并实现自动化发布的完整流程。通过 GitHub Actions 实现 VSCode 插件的自动化发布,涵盖了从创建发布 Token、配置 GitHub Action 工作流,到支持 Visual Studio Marketplace 和 OpenVSX 双平台发布的完整方案,提升了开发效率,展现了现代前端工程化的最佳实践。
帮帮忙
我们 Wot UI 正在参加 Gitee 2025 最受欢迎的开源软件投票活动,你的投票对我们来说非常重要!快来给 Wot UI 投票吧!
投票地址:https://gitee.com/activity/2025opensource?ident=IEVXGS

参考资源
- wot-ui: https://wot-ui.cn/
- wot-ui-intellisense: https://github.com/wot-ui/wot-ui-intellisense
- HaaLeo/publish-vscode-extension: https://github.com/HaaLeo/publish-vscode-extension
- wot-starter: https://starter.wot-ui.cn/
往期精彩
当年偷偷玩小霸王,现在偷偷用 Trae Solo 复刻坦克大战
告别 HBuilderX,拥抱现代化!这个模板让 uni-app 开发体验起飞
Vue3 uni-app 主包 2 MB 危机?1 个插件 10 分钟瘦身
欢迎评论区沟通、讨论👇👇