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

发布于 2026年09月10日·2 分钟阅读

cover_info_flow

大家好,我是齐昂!

周二晚上快 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 模板也能自定义,文件名、日期想怎么排都行。已有的老笔记想迁移,右键一个文件夹就能批量把本地图片全部传上云。

Obsidian 插件页

两个插件都是 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 个下载。

VSCode marketplace 页面

一开始我挺受打击的。后来想明白了,这不是功能的差距,是渠道的差距。Obsidian 的社区插件市场自带分发:用户在里面搜索、浏览、上榜,长尾流量是持续进来的。而 VSCode 的市场更像一个大仓库,没有曝光,就真的没有人。

对独立开发者来说,选对渠道可能比多写一个功能重要得多。

但换个角度想:正是 VSCode 版那"个位数"里的一个用户,加了我微信,让我一天之内发了两个版本。616 个下载里还没有人跟我说过话。

所以我对"下载量"这个东西已经不太焦虑了。一个愿意花时间反馈的用户,比一堆沉默的数字值钱。

轮到你了

如果你也在 Markdown 里写东西、也被图床折腾过,可以试试:

  • VSCode 版:扩展市场搜 EzImage,或访问 marketplace 主页。除了 VS Code,Cursor、Windsurf、Trae、Antigravity 这些 AI IDE 也能装
  • Obsidian 版:设置 → 第三方插件 → 浏览,搜 EzImage
  • GitHubkeepwonder/ezimage(VSCode)、keepwonder/ezimage-obsidian(Obsidian),MIT 协议,文档里有完整的功能表和排错指南
  • R2 配置教程:参考之前那篇《薅秃羊毛!手把手教你搭建 0 流量费的"永久"图床》,从建桶到插件配置一条龙

有 bug、有需求,欢迎提 issue,或者直接加我微信(备注"EzImage")——这次的事让我确认了,反馈是真的会被听见,而且是当天就被听见。

以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~感谢你的阅读,我们下次见。


我是齐昂,10 年+大数据 · Python · AI 开发经验,现在独立创作,在公众号持续写 AI 工具踩坑实录和编程实战。想持续收到新文章,或者一起交流,可以扫码:左边关注公众号「齐昂AI」,右边加我微信。

左:关注公众号齐昂AI;右:扫码加我微信