开发一个可以快速上传图片的vscode插件
前言
Img Fast 是一个可以快速上传剪切板图片并获取图片 URL 的 vscode 插件。
本文记录该插件的开发思路及详细开发过程。
使用
使用方面可以直接查看项目的 README 文档:https://github.com/lvboda/vscode-img-fast
思路
- 获取剪贴板图片的二进制数据
- 根据配置生成上传函数等待调用
- 监听粘贴事件,并调用上传函数上传剪切板图片
其实看上去比较简单,但实际开发中会遇到很多细节问题,因为是在 vscode 的规范下。
创建项目
全局安装 yeoman 脚手架工具和 generator-code VSCode代码生成器:
1 | npm install -g yo |
执行如下代码创建项目:
1 | yo code |

根据提示进行选择,完成后会自动创建文件夹并帮助初始化完成文件,我们先来看下目录结构。
1 | |-- src |
两个关键点:
- extension.js 是插件的入口文件
- package.json包含插件的配置信息(插件命令、快捷键、菜单均在此配置)
启动项目
在 vscode 中F5运行(或Debug->start)如果你可以看到 vscode 又启动了一个窗口运行插件项目,shift+ctrl+p 输入 Hello World 如果在右下角能看到 Hello World 的提示信息就OK 了。
package.json配置
1 | { |
这是 Img Fast 的 package.json,我直接粘过来了,可作为参考。
配置项
1 | const defaultConfig = { |
上传功能实现
首先看一下入口文件 extension.ts,这里我们注册一个上传命令:
1 | export function activate(context: ExtensionContext) { |
看一下 createOnCommandUploadHandler 的实现:
1 | export function createOnCommandUploadHandler() { |
获取剪切板图片
获取剪切板图片核心用到了 electron-clipboard-ex 这个库,它支持 windows 和 mac 的剪切板图片获取,主要看一下 getClipboardImages 函数:
1 | // 引入 electron-clipboard-ex |
其实 Node 要获取剪切板里的二进制是一个很难的事情,所以我看了相关的实现,一般都是根据不同操作系统调用相关脚本来实现,而 electron-clipboard-ex 这个库是用 OC 和 C++ 来实现并提供接口来供 Node 调用的,比调用脚本会更简单一点。
监听粘贴事件实现自动上传
上面已经实现了上传剪切板图片的功能,并注册了上传命令,也就是通过在 vscode 中 ctrl + shift + p 输入 vscode-img-fast.upload 就可以上传剪切板图片了,也可以通过在 vscode 中绑定快捷键来实现快捷键上传。
但是如果不想绑定快捷键也不调用命令,想直接复制图片在编辑器里粘贴就能上传,这个功能我们接着往下看代码:
1 | // 入口文件 extension.ts 中 |
删除功能实现
1 | // 和上传一样注册一个上传命令 |
这样就保证了权重大小:有参数 > 有选中的文本 > 什么也没有
注册HoverProvider
写好了删除命令还要写一个附加功能,就是鼠标悬浮在图片的 url 上就出现悬浮窗,点击悬浮窗上的删除文字即删除当前的图片url。
1 | // extension.ts 入口文件 |
钩子函数
一共有三个钩子函数,执行时机分别是上传图片前、上传图片后、删除图片后,直接看代码:
1 | // 生成一个自定义错误,为表示 http 请求失败 |
国际化
在项目文件下新建 package.nls.语言.json 格式的文件,内容示例:
1 | // package.nls.zh-cn.json |
新建 localize.ts 文件,代码如下:
1 | import * as fs from "node:fs"; |
在代码中使用:
1 | import localize from './localize'; |
在 package.json 中使用:
1 | { |
打包发布
首先全局安装 vsce
1 | npm i vsce -g |
本地打包
1 | vsce package # 打包 vsix 文件 |
vsix 文件可以在 vscode 插件市场右上角引入
发布
1、 创建 Microsoft 账号
2、 创建 Azure组织
3、 创建 PAT(Personal Access Token,个人访问令牌)
4、 使用 vsce 命令
1 | vsce login <publisher> |
最后
项目的 github 地址:https://github.com/lvboda/vscode-img-fast
参考资料
开发一个可以快速上传图片的vscode插件

