半年前写的插件,有人加我微信提需求了

大家好,我是齐昂!
周二晚上快 11 点,我收到一条微信好友申请,验证消息就四个字:插件用户。
说实话,我当时没太当回事。
半年前把 EzImage 挂上 VSCode 插件市场的时候,我幻想过很多种"被用户看见"的方式:star 涨了,有人提 issue,评论区有人夸好用。结果这半年,它安安静静躺在 marketplace 里:下载量个位数,没有评分,没有评论,更没有人加过我微信。
我也慢慢接受了:工具做出来没人用,这才是常态。而且做这个插件的初衷,也是为了满足我个人的写作需求。
第二天早上 8 点半,我点了通过验证。8 点 33 分,对方发来第一条消息:

"vscode 的插件蛮好用的,只是压缩和转 webp 功能我用不了,上传到 R2 后还是原图。"
后面又补了一句:"后台参数我都设置好了的。路径自定义都没有问题,就是原图上传,不做处理。期待👍👍"
那一天接下来发生的事,让我对"做产品"的理解全变了。凯文·凯利有个流传很广的说法:一个创作者,不需要百万用户,1000 个铁杆粉丝就足以支撑你。
而这 1000 个粉丝,都是从第一个愿意跟你说话的人开始的。
这篇文章就把 EzImage 的故事讲清楚:插件是干嘛的、这个 bug 是怎么排查的,以及"个位数下载"教会我的事。
先说 EzImage 是个啥
写 Markdown 的朋友应该都遇到过两类烦心事。
第一类是烦:文章里要配图,截图、保存、找图床、上传、复制链接、粘贴,一套流程走下来,思路全断了。
第二类是裂:图片要是存在本地,用相对路径往文章里一插,自己看着好好的,等把文章复制粘贴到公众号、知乎这些平台一发——图片全裂。平台读不到你电脑里的文件,本地路径出了门就是死路。
EzImage 干的事,就是把这两个问题一起解决:粘贴即上传,传完直接给你一条公网外链。
VSCode 版:截图后按 Ctrl+Alt+V(Mac 是 Cmd+Alt+V),图片自动压缩转成 WebP,传到你自己的 Cloudflare R2 存储桶,编辑器里直接插入一条 Markdown 外链;也支持拖拽上传(设置里开启后),按住 Shift 把图片拖进编辑器,传完原位就变成外链。压缩引擎是 sharp,默认最大宽度 1920、质量 85,都能调。上传路径用模板变量控制,比如 {yyyy}/{MM}/{timestamp}-{random}.{ext},按年月归档、时间戳加随机数防重名,图床上永远不会乱成一锅粥。
前面说的"文章一发出去图就全裂",它也给了一键解法:右键菜单里有个"把本地图片路径转成 URL",扫出当前文档里所有本地图片,批量传到你的桶里,路径原位替换成外链。整个替换是一次原子编辑,后悔了按一次撤销就全部回来。写了一半的老文章想搬家,不用一张一张重新传。
它也不挑编辑器:Cursor、Windsurf、Trae、Antigravity 这些 AI IDE 都能装,毕竟内核都是 VS Code 那一套。界面中英文双语,跟着编辑器语言自动切。
Obsidian 版:思路一样,但多了一个我很喜欢的设计——上传模式和本地保存模式可以一键切换,状态栏常驻显示当前状态。不想传云的时候,图片自动存进笔记库的附件文件夹,插 wikilink;想发云的时候,粘贴即上传,笔记里只有一条干净的 URL,换台电脑也不会裂图。
隐私这块也做了处理:压缩转 WebP 时自动剥除 EXIF(GPS 定位、设备信息这些);就算关掉压缩,也会用 Canvas 重绘一遍图片再把元数据洗掉。上传走的是 AWS Signature V4 签名,全部在本机用 Web Crypto 算完才发出去,密钥不离开你的设备。上传失败自动重试两次。插入的 Markdown 模板也能自定义,文件名、日期想怎么排都行。已有的老笔记想迁移,右键一个文件夹就能批量把本地图片全部传上云。

两个插件都是 MIT 开源。R2 只是起点,通用 S3 协议、阿里云 OSS、腾讯 COS、GitHub 图床都在 roadmap 上。今年 3 月我写过一篇搭 R2 图床的教程(《薅秃羊毛!手把手教你搭建 0 流量费的"永久"图床》),零流量费加这个插件,基本就是我现在的写稿流水线。
排查实录:sharp 装不上
回到那位用户的反馈。
他说的"压缩和转 webp 用不了",原因在弹窗里其实已经写了:EzImage 的压缩靠 sharp 这个图像处理库。sharp 不是纯 JS,它带着一堆按操作系统和 CPU 架构编译好的原生二进制,安装时要下载对应平台的那一份。VSCode 用的是自己内置的 Node,版本和你系统装的 Node 不一定一样,这就又多了一层匹配问题。所以 sharp 是整个插件里唯一可能"装不上"的东西。
他的情况是:插件弹窗提示"现在自动安装吗",点"立即安装",总失败。于是插件按设计降级:跳过压缩,原图直接上传。功能没坏,压缩白搭。

上午 10 点 44 分,我先发了 v1.0.3:把 sharp 的报错信息做了可视化,首次使用时的自动安装逻辑也改进了,顺手把安装包体积砍了 92%。中午 12 点,我给用户发消息:"更新了一版,有时间可以试试,vscode 版本做的比较简陋,有什么其它的想法或需求也可以提出来😊"
但问题显然出在他那边的环境,下午继续排查。
我让他打开 VSCode 的输出面板,把 EzImage 的日志发我。然后就是这段最有烟火气的部分:他拍着屏幕发来一张照片,打开的输出面板里滚动的全是 Git 日志。
不是他操作有问题,是输出面板右上角有个下拉框,默认显示的是别的通道,得手动切到 EzImage。这个设计对老手是常识,对普通用户就是个隐藏关卡。我干脆把自己电脑的界面截了图,红箭头标了两处:右上角下拉框在哪、正常的日志长什么样,发给他对照。

"就是我刚刚发的吧😅"
"看着不像啊。"
又来回了两轮,我直接给了快捷键:Ctrl+Shift+U,切换输出通道。这次他切对了。
切对之后,日志里终于出现了真正有用的线索。他的输出里有一行 fatal: unable to access 'https://github.com/...': Connection was reset——连 GitHub 都访问不了。这一下就对上了:sharp 的二进制托管在外网,自动安装要从 GitHub 拉文件,他的网络过不去,装十次也是失败。
到这一步,根因清楚了:不是插件的锅,是网络。我告诉他 sharp 不是 VSCode 插件,在扩展商店里搜不到,它是个 npm 包。他说那我在 PowerShell 里手动装,给我命令。我给了:

cd "$env:USERPROFILE\.vscode\extensions\kiang.ezimage-1.0.3"
npm install sharp --no-save --no-audit --no-fund
最后他是"在豆包帮助下"装成的,跑来跟我说:"已经 OK 了,谢谢。已经成功转 webp。希望在插件里能说明一下🤔"
行,这个建议很中肯,当天晚上就安排了。
12 小时后的第二个版本
故事到这还没完。这位用户解决完自己的问题,顺手提了个新需求。
他现在粘贴图片得到的是标准的 Markdown 链接,但他希望图片能居中、能控制宽度,比如 65%。原话是"个人非常需要控制图片尺寸,供你考虑。总之比较满意这个插件"。
这个需求很合理,写公众号的人基本都懂:图片太大撑满屏,太小看不清。
下午 3 点 45 分他提的需求,晚上 7 点 40 分,v1.0.4 发了。插入格式做成了可配置项,四个预设:纯 Markdown、HTML 包裹、HTML figure、完全自定义模板;宽度和对齐是独立设置,想要他说的那个效果,格式设成 html-wrap、宽度 65%、对齐 center,出来的就是他描述的那个 <div align="center"><img width="65%"></div>。还留了个一次性命令 Upload Clipboard Image As…,偶尔想换格式又不想改默认设置的时候用。顺带把运行时的中英文界面、设置面板分组、README 里的 Troubleshooting 章节一起做了——最后这个就是回应他那句"希望在插件里能说明一下"。
35 分钟后,我发消息告诉他:"新发了一版,加了插入格式配置,有时间可以试试🙏"
他回:"真厉害😄"

这三个字,比下载量涨 100 都爽。
顺带一提:就在我写这篇文章的今天,v1.1.0 和 v1.1.1 又相继发了。前者把 Markdown 里已有的本地图片一键批量转成云端 URL——就是前面说的"文章复制出去图全裂"的一键解法;后者修掉了一个 sharp 安装的时序问题:以前你选了"安装",原图还是会并行传上去,现在会等你装完、提示重载后再拿压缩版重试。你看,连那位用户的 sharp 问题,都在被继续打磨。
这种"提了就做"的事也不是第一次。Obsidian 版之前收到过两个 issue:一个希望支持批量上传笔记里的本地图片,一个希望压缩时能排除 gif。两个都做完、关单了——批量上传现在连右键单个文件夹定向迁移都支持,gif 排除做成了"保持原格式"列表,动图、透明图都不会被压坏。
616 和个位数
写这篇有个数字绕不开。
同样是我做的、能力几乎一样的两个插件:VSCode 版上架半年,下载量个位数;Obsidian 版在社区插件市场,616 个下载。

一开始我挺受打击的。后来想明白了,这不是功能的差距,是渠道的差距。Obsidian 的社区插件市场自带分发:用户在里面搜索、浏览、上榜,长尾流量是持续进来的。而 VSCode 的市场更像一个大仓库,没有曝光,就真的没有人。
对独立开发者来说,选对渠道可能比多写一个功能重要得多。
但换个角度想:正是 VSCode 版那"个位数"里的一个用户,加了我微信,让我一天之内发了两个版本。616 个下载里还没有人跟我说过话。
所以我对"下载量"这个东西已经不太焦虑了。一个愿意花时间反馈的用户,比一堆沉默的数字值钱。
轮到你了
如果你也在 Markdown 里写东西、也被图床折腾过,可以试试:
- VSCode 版:扩展市场搜
EzImage,或访问 marketplace 主页。除了 VS Code,Cursor、Windsurf、Trae、Antigravity 这些 AI IDE 也能装 - Obsidian 版:设置 → 第三方插件 → 浏览,搜
EzImage - GitHub:keepwonder/ezimage(VSCode)、keepwonder/ezimage-obsidian(Obsidian),MIT 协议,文档里有完整的功能表和排错指南
- R2 配置教程:参考之前那篇《薅秃羊毛!手把手教你搭建 0 流量费的"永久"图床》,从建桶到插件配置一条龙
有 bug、有需求,欢迎提 issue,或者直接加我微信(备注"EzImage")——这次的事让我确认了,反馈是真的会被听见,而且是当天就被听见。
以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~感谢你的阅读,我们下次见。
我是齐昂,10 年+大数据 · Python · AI 开发经验,现在独立创作,在公众号持续写 AI 工具踩坑实录和编程实战。想持续收到新文章,或者一起交流,可以扫码:左边关注公众号「齐昂AI」,右边加我微信。
