Deno 2.9 直接支持桌面应用:无需 Electron,前端框架秒变二进制
基于 Web 技术栈开发桌面应用,一般采用 Electron 等框架。但现在,Deno 比 Node 更激进——Deno 2.9 支持把现有的前端框架项目直接转化为桌面应用,最终产物是一个可分发的独立二进制文件,无需编写 Electron 样板代码。
一、背景:桌面应用的「三国杀」
以前基于 Web 技术栈构建桌面应用,但现有方案各有痛点:
| 框架 | 痛点 |
|---|---|
| Electron | 同时打包 Node + Chromium,体积臃肿 |
| Tauri | 需要 Rust 语言基础,学习成本高 |
| Electrobun | 新框架,生态不成熟 |
现在,Deno 2.9 来了——它直接提供了 deno desktop 命令,把 Deno 运行时和 Web 渲染引擎打包成二进制文件,将前端框架转化为跨平台的桌面应用。
以前:在 Node/Deno 等运行时上跑 Electron 等框架,双方各司其职。
现在:Deno 自己基于前端框架生成桌面应用,不带 Electron 玩了。
二、核心架构:WebView vs CEF
桌面应用需要浏览器引擎来绘制用户界面,Deno 提供两种选择:
WebView(默认)
使用操作系统内置的渲染引擎:
| 平台 | 引擎 |
|---|---|
| Windows | WebView2 |
| macOS | WebKit |
| Linux | WebKitGTK |
优点:二进制文件体积小、启动快
缺点:不同平台渲染不完全一致
CEF(Chromium Embedded Framework)
在所有平台上都使用 Chromium 引擎:
优点:确保所有平台渲染一致
缺点:打包体积较大,构建时需要下载
三、基本用法
创建桌面应用
// 提供一个用户界面的入口
Deno.serve(); // 自动绑定 webview 打开的端口
启动桌面应用
deno desktop main.ts
如果不带 main.ts 作为入口,Deno 也会自动检测当前项目中的前端框架(如 Next、Nuxt 等),然后构建和包装。
原生桌面 API
Deno 内置了一套原生桌面 API,无需额外依赖,可以编程控制窗口大小、菜单等:
const window = Deno.desktop.window();
await window.setSize({ width: 1024, height: 768 });
await window.setTitle("我的桌面应用");
交叉编译
从一台机器就能交叉编译到五大平台:
deno desktop --target x86_64-pc-windows-msvc
deno desktop --target aarch64-apple-darwin
| 目标 | 操作系统 | 架构 |
|---|---|---|
| x86_64-pc-windows-msvc | Windows | x86_64 |
| x86_64-unknown-linux-gnu | Linux | x86_64 |
| aarch64-unknown-linux-gnu | Linux | arm64 |
| aarch64-apple-darwin | macOS | arm64 |
| x86_64-apple-darwin | macOS | Intel |
官方示例
Deno 的官方示例是一个笔记桌面应用 denidian:
git clone https://github.com/bartlomieju/denidian
cd denidian
deno desktop
四、Deno vs Electron vs Tauri 对比
| 特性 | Electron | Deno | Tauri |
|---|---|---|---|
| 编程语言 | JS / TS | JS / TS | Rust + JS / TS |
| Web 引擎 | Chromium | CEF / WebView | WebView |
| 一致渲染 | ✅ | ✅ | ❌ |
| 兼容 Node | ✅ | ✅ | ❌ |
| 交叉编译 | ✅ | ✅ | ❌ |
| 框架自检测 | ❌ | ✅ | ❌ |
| iOS / Android | ❌ | ❌ | ✅ |
| 二进制体积 | 大 | 中 | 小 |
| 生态成熟度 | 极高 | 实验性 | 中 |
五、适用场景
✅ 适合 Deno 桌面应用的场景
- 纯 Web 技术栈团队:无 Rust 开发经验,基于 JS/TS
- 使用 Next/Nuxt/Astro 等框架:deno desktop 自动检测,零配置
- 需要跨平台渲染一致性:可选择 CEF(接受稍大的二进制体积)
- 不涉及移动端:目前 Deno 不支持 iOS/Android
❌ 仍然适合 Electron/Tauri 的场景
- 需要成熟插件生态(electron-builder、自动更新等)
- 需要移动端支持(Tauri 支持 iOS/Android)
- 对二进制体积极其敏感(Tauri 最小)
六、现状与展望
deno desktop 是 Deno 2.9 最新上线的实验性功能,暂不建议直接落地生产环境。
优点总结:
- ✅ 基于纯 Web 技术,兼容 Node 生态,无需 Rust 基础
- ✅ 自动检测前端框架,支持 webview 或 cef
- ✅ 跨平台交叉编译,五大平台完整支持
缺点:
- ❌ 不支持移动端应用
- ❌ 生态尚不成熟
- ❌ 实验性功能,API 可能变动
一句话:Deno 开发桌面应用是一个中间地带的先锋实验,相较于 Electron / Tauri 生态各有优缺点,未来或许能进一步竞争桌面应用市场,但暂时不会成为它们的直接替代品。
相关链接
- Deno 桌面应用文档: https://docs.deno.com/runtime/desktop
- Deno 2.9 官方博客: https://deno.com/blog/v2.9
- 笔记应用示例 (denidian): https://github.com/bartlomieju/denidian
- Deno 官网: https://deno.com
原文综合整理自微信公众号。