开发一个 vscode 扩展(虽然标题已经烂大街了,但文章内容是不同于其他同类文章的)内附多图发布扩展流程!


该文章旨在记录我的 vscode 扩展(比如 vs-misc)的开发流程。

由于网络上有关开发 vscode 扩展的文章几乎已经烂大街了,我只有在第一次开发 vscode 扩展时,才发现那些文章有点价值,但当我开发过几个自己的扩展后,就发现这些文章对我来说太过"啰嗦"(非贬义)了,而且版本太旧了。我现在所需要的知识点,几乎都是通过官方文档,或者 GitHub 上的 issue 搜索,或者直接通过 vscode 的 ts 类型查看注释得来的。但考虑到我也不是专门开发 vscode 扩展的,时间一久可能有些太简单的内容也会忘记,所以这里简单记录一下,方便自己以后一看就懂。

本文章虽然会持续更新,但考虑到还没有形成我喜欢的知识体系,所以并没有在个人博客中发布。

此外,本文中持续内容是自下而上的,也就是下面的内容是旧内容,上面的内容是新内容。




编辑内容、和需要熟记的 Range, Selection 和 Position

具体内容直接在开发时查看类型声明文件(优秀的项目,它的注释就是文档)。这里只做简单说明

Position 相当于编辑器中的坐标,通过 line (第几行) 和 character (第几列) 可以唯一确定一个位置

Range 表示一个范围 (start, end),它提供了很多方便的 api,比如光标是非有选择内容,两个范围是否相同等等,

Selection 继承自 Range,表示光标选择的内容,anchor 表示描点,也就是选择的开始,active 表示光标位置。

对编辑器中的内容进行更改时,可以使用 vscode.window.activeTextEditor.edit,需要注意一点的是,如果编辑多行光标内容时,应该是一次性在该函数中编辑,而不是循环调用该编辑函数。下面是从项目中提取处理的代码,以进行说明

❌错误示例

ts 复制代码
// 获取当前编辑器中的多个光标位置
const selections = editor.selections
selections.forEach(selection => {
    // 通过循环调用编辑函数来编辑内容?❌
    void editor.edit(editBuilder => {
        editBuilder.insert(selection.active, 'xx')
    })
})

✅正确示例

ts 复制代码
// 获取当前编辑器中的多个光标位置
const selections = editor.selections
// 一次性完成编辑!
void editor.edit(editBuilder => {
    selections.forEach(selection => {
        editBuilder.insert(selection.active, 'xx')
    })
})

参考自:github.com/microsoft/v...

需要熟记的 vscode UI 图


基本通用流程

官方文档:Get Started

  1. 创建项目
sh 复制代码
npx --package yo --package generator-code -- yo code

# 或者

npm install --global yo generator-code

yo code
  1. 编辑对应文件

在 package.json 文件中,注意是修改必要的插件信息(如 name, publisher, version, engines)。还有配置打包 (package) 和发布 (publish) 脚本。

此外,目前最新(2024-03-11)打包扩展的命令是 @vscode/vsce 而不是以前的 vsce

  1. 发布扩展到应用商城

发布前注意,虽然扩展的 ID(Identifier) 由 publisher 字段和 name 字段组成,但还是要求你的 name 字段在整个扩展市场中唯一。

发布流程核心步骤如下:

  1. 进入插件市场,点击右上角的 "Publish extensions"。(需要登录时按照提示进行登录,比如可以通过 GitHub 账户登录)
  2. 初次发布时,需要创建一个 publisher,名称要和 package.json 中的 publisher 字段相同
  3. 然后就可以通过命令 npx @vscode/vsce publish 将插件发布到公共插件市场了

运行命令时,会提示你输入一个密钥,或者密钥的方式如下:

  1. 还是进入插件市场,然后点击右上角的 Alan(linhieng@qq.com)
  2. 此时会进入 aex.dev.azure.com/me
  3. 如果初次进入,那么就需要先创建一个组织,跟着提示进行创建
  4. 如果已有组织,点击进入该组织,网址通常是 https://dev.azure.com/<组织的名称>
  5. 进入组织后,不需要创建新项目,直接点击右上角的用户设置图标,选择个人密钥 (personal access tokens)
  6. 然后创建一个新密钥 (new token),作用域 (scopes) 选择全局 (full access) 就可以了。
  7. 复制生成的密钥,粘贴到刚刚的命令终端里面

刚好有个 id 还没注册,所以这里顺便给出完整的截图

进入插件市场,点击发布扩展 登录,可以使用 GitHub 账户 填写 name 和 id 然后创建

创建后会跳到该页面。不用管,直接点击上方的用户

此时会切换到 azure 云,可以看到现在还没有组织,直接创建一个新组织

初次创建,需要做什么跟着提示来就行

有了组织后,不需要创建项目,直接生成自己的密钥

获得密钥后直接复制


相关推荐
黄毛火烧雪下6 小时前
React Native (RN)项目在web、Android和IOS上运行
android·前端·react native
fruge6 小时前
前端正则表达式实战合集:表单验证与字符串处理高频场景
前端·正则表达式
baozj6 小时前
🚀 手动改 500 个文件?不存在的!我用 AST 撸了个 Vue 国际化神器
前端·javascript·vue.js
用户4099322502126 小时前
为什么Vue 3的计算属性能解决模板臃肿、性能优化和双向同步三大痛点?
前端·ai编程·trae
海云前端16 小时前
Vue首屏加速秘籍 组件按需加载真能省一半时间
前端
蛋仔聊测试6 小时前
Playwright 中route 方法模拟测试数据(Mocking)详解
前端·python·测试
零号机6 小时前
使用TRAE 30分钟极速开发一款划词中英互译浏览器插件
前端·人工智能
疯狂踩坑人6 小时前
结合400行mini-react代码,图文解说React原理
前端·react.js·面试
Mintopia7 小时前
🚀 共绩算力:3分钟拥有自己的文生图AI服务-容器化部署 StableDiffusion1.5-WebUI 应用
前端·人工智能·aigc
街尾杂货店&7 小时前
CSS - transition 过渡属性及使用方法(示例代码)
前端·css