ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

用 WorkBuddy 写了个 ImageKit 上传工具

用 WorkBuddy 写了个 ImageKit 上传工具 用 WorkBuddy 写了个 ImageKit 上传工具我平时用 ImageKit 存图。后台那个上传框一次拖几十张就开始排队进度条挤成一列还得一直盯着别断了。忍了几次之后决定写个桌面工具要求也不高能批量拖进去、能看见每张的状态、失败了能重试。问题是我不想再从头配一遍 Electron。之前弄过一次vite、主进程、预加载脚本、打包配置光让窗口正常出来就花了一下午最后还卡在 dmg 上。所以这回换了个法子用 WorkBuddy把想要的东西说清楚让它去搭。头一个小时我还在写需求文档刚上手时我不太确定该怎么跟它说话。第一段我写得跟 PRD 一样分了好几条还特意加了技术要求和验收标准生怕漏掉什么。它照着搭出来了但我很快就发现没必要——直接说人话就行说这个按钮我用着别扭改一下它也跟得上。真正让我改观的是它不只是给我代码片段。它能自己去读文件、跑命令、翻日志、改配置。前两天 mac 的构建挂了我习惯性地准备去把报错复制出来结果试了句mac 的安装包构建失败了去看一下它自己把 CI 的日志拉回来落到了具体哪一行。这跟我以前用过的补全类工具完全不是一回事。密钥这块我没敢马虎第一段里我特地加了一句ImageKit 的 private key 绝对不能进渲染进程。以前踩过坑所以这条写得很死。它把结构做成了这样所有跟 key 沾边的活——签名、发起上传、测试连通性——全部留在主进程渲染进程只能通过 preload 里白名单放出去的几个 IPC 调用碰不到密钥。这个结构我认后面一直没动过。配置存在 userData 下的 config.json 里仓库里只留一份带假值的 config.example.json。改得最久的是云端目录拖拽区、上传队列、历史记录、设置弹窗基本都是一遍过的来回改得最多的是云端目录浏览那一块。一开始做成单击目录就进去。自己用两次就觉得别扭大多数时候你只是想挑一个目录当上传目标并不想跳进去。改成单击选中、双击或者点那个箭头进入才顺手起来。加英文这件事比我想的折腾界面起初全是中文。后来想想还是得让英文用户能用于是加了英文而且默认英文。代价比预想中要大。文案原本是硬写在组件里的翻到一半我就知道要出事——改一个词得满项目去搜。改成字典之后舒服多了以英文那份为准中文声明成RecordMessageKey, string少翻一条npm run typecheck直接报错想漏都漏不掉。渲染层包一层 Provider组件里用useT()取。主进程那边是后来才想起来补的。报错信息、dialog 的标题、文件过滤器的名字一开始还是中文。中文界面下看不出问题一切成英文就露馅了。还有个坑现在想起来挺好笑的。验证语言切换到底生效没有我一开始靠截图。有几次截出来还是英文我以为切换失败了来回查了半天。后来才反应过来capturePage()在状态刚变化的时候会返回上一帧。改成就直接读 DOM 里的文本一眼就对了。截图现在只留给给你看看长什么样这个用途。顺手还定了个规矩不能拿翻译后的文案去做判断。比如判断对话框是不是被用户取消了不能去比已取消这个字符串得走一个专门的函数。环境比代码难缠代码上的问题好歹能想明白环境上的不行。npm 的缓存目录属主是 root装依赖直接报错后来改成指定项目内的缓存目录才过去。这个环境还预设了ELECTRON_RUN_AS_NODE1直接跑起不来得先把这个变量摘掉。最阴的一个是窗口假死。新开一个实例看起来毫无反应。查了很久才发现是上次没清干净的单实例锁文件还躺在那儿新进程一启动就自己退出了我盯着的一直是那个旧窗口。ps和pkill在这个环境里也用不了列不出进程只能拿已知的 pid 一个个kill -0去试。那两天我的排查方式基本是猜一个 pid试一下。打 tag 那天晚上mac 挂了CI 分了三条线平时 push 和提 PR 只跑类型检查加构建打v*的 tag 才出安装包dmg 和 exe然后自动建 Release。前两天打了个 v1.0.0。Windows 那边一百秒出头就完事了mac 这边 85 秒退出倒在打包 dmg 上。日志最后是这样⨯ unable to execute hdiutil args[detach,-quiet,/Volumes/ImageKit Uploader] errorExit code: 16. Above command failed, retrying 5 more times卸载挂载卷失败重试 6 次全挂然后整个 job 断掉。我一开始怀疑是 runner 环境的问题macos-14 是 arm64 机器Spotlight 又爱去啃刚挂上来的卷。后来把日志往前翻才看到关键的地方arm64 和 x64 两个 dmg 是同时开始打的而它们的挂载卷名一模一样都叫 ImageKit Uploader——卷名取自dmg.title也就是 productName。两个同名卷撞在一起谁先卸载谁失败。修的时候还多踩了一脚。我以为在命令后面加--arm64/--x64就能把两个架构拆开试了才发现没用electron-builder.yml里mac.target下面写死的 arch 列表会盖掉命令行的参数。得先把那段删掉架构全部交给命令行指定再拆成两次串行调用。现在 CI 里是这么写的-name:关闭 Spotlight 索引run:sudo mdutil-a-i off||true-name:打包 dmgarm64 x64run:|build_dmg() { npx electron-builder --mac --arm64 --publish never npx electron-builder --mac --x64 --publish never } build_dmg || { hdiutil detach -force /Volumes/ImageKit Uploader || true sleep 10 build_dmg }到底是同名卷的锅还是 Spotlight 的锅说实话我没百分之百确定干脆两边一起堵外面再套一次重试。能稳定跑就行。现在的状态Release 里躺着两个 dmgApple Silicon 和 Intel加一个 exe都没签名。mac 上第一次打开要右键Windows 会弹 SmartScreen 提示。还欠着两件图标到现在还是 Electron 默认那个原子球被朋友吐槽过一次自动更新也没接每次发版都得到处去下载手动装。先这样功能上是能用了剩下的慢慢补。仓库地址github地址
返回列表