doubleshot
用同一套代码同时构建Web和桌面应用,NestJS开发者的Electron集成利器
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用同一套代码同时构建Web和桌面应用,NestJS开发者的Electron集成利器
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
作为前端或全栈工程师,你可能经常遇到这样的困境:写好了漂亮的Vue/React前端和稳健的NestJS/Express后端,Web应用上线了,但产品经理突然过来说——「能不能做个桌面版?不用浏览器,直接装个客户端。」
传统的解决方案是另起炉灶,用Electron重新实现一遍。你需要单独维护两套代码,处理IPC通信层,管理窗口和进程……等于把项目重做一遍,代价极高。
DoubleShot 解决的就是这个痛点。它的核心理念用一句话概括:同一套代码,稍作修改,同时跑在浏览器和桌面窗口里。
DoubleShot的作者Archer Gu在README中写下这样一段话:
「工程师的时间是宝贵的,我希望一套代码能够稍作修改后同时应用于桌面和Web应用。这样我们就能腾出更多时间喝咖啡了。」
带着这种「工程师式偷懒」的务实精神,作者从2022年开始开发DoubleShot,至今已迭代125个版本、提交2343次。它不是一个炫技项目,而是一个真正解决工程问题的工具箱。
DoubleShot的核心架构可以用一张图说明:

图1:DoubleShot项目Logo — 双份浓缩咖啡,一份给后端,一份给桌面
| 包名 | 职责 |
|---|---|
packages/runner | 开发时同时启动渲染进程(前端)和主进程(后端),提供热更新支持 |
packages/builder | 生产构建,将Electron主进程和Node后端打包为可分发应用 |
packages/nest-electron | NestJS集成模块,提供IPC传输层和Electron窗口管理 |
packages/plugin-vite | Vite插件,连接构建工具链 |
传统Electron应用中,主进程(Node.js)和渲染进程(Chromium/V8)通过ipcMain和ipcRenderer通信。DoubleShot在这里做了一层抽象——把NestJS的传输层适配到Electron IPC上,让NestJS的服务可以直接调用Electron主进程的原生能力(文件系统、系统托盘、系统通知等),无需额外适配。
// packages/nest-electron/src/electron.transport.ts
// NestJS通过ElectronTransport直接与主进程通信
这意味着你可以在NestJS的Controller/Service里写正常的异步逻辑,同时享受Electron提供的原生桌面能力。对NestJS开发者而言,学习曲线几乎为零。
DoubleShot还提供了快速的架构转换能力。一个已有的Vue/React+Node后端项目,通过引入DoubleShot的Electron模块,可以在几分钟内生成一个独立的桌面窗口。开发者不需要理解Electron的深层机制,只需要知道如何配置窗口参数即可。
DoubleShot本身是一个纯本地开发工具,不需要服务器部署,也不支持Docker容器化运行。
部署要求极低:
安装方式:pnpm install && pnpm run build
从项目仓库看,作者提供了清晰的构建脚本,生产构建由tsdown和electron-builder驱动,Windows/macOS/Linux三平台均可打包输出。
⚠️ 重要提示:DoubleShot明确声明项目处于早期阶段(Early Stage),不建议在生产环境中使用。如果你打算用于正式产品,需要自己做好充分的测试和备份。
| 特性 | DoubleShot | Nextron | Electron Forge |
|---|---|---|---|
| NestJS原生集成 | ✅ | ❌ | ❌ |
| IPC Transport封装 | ✅ | ❌ | ❌ |
| B/S→C/S快速转换 | ✅ | ❌ | ❌ |
| pnpm monorepo | ✅ | ❌ | ✅ |
| 成熟度 | 早期(实验性) | 较成熟 | 成熟 |
| 文档质量 | 中等 | 良好 | 优秀 |
DoubleShot代表了Electron生态中一个有趣的趋势:让前端/全栈工程师以最低成本进入桌面应用开发。随着Vue 3、React 18等现代前端框架的成熟,Electron应用的开发体验正在快速追赶原生应用。DoubleShot在这个方向上迈出了针对NestJS生态的独特一步。
如果你正在维护一个Vue/React+NestJS的全栈项目,并且恰好需要快速交付一个桌面版本,DoubleShot值得在技术调研阶段给予关注。但请务必在测试环境中充分验证后再决定是否引入正式项目。