Deno 2.9 新功能:用前端代码直接生成桌面应用,不靠 Electron
过去几年,如果你想用网页技术做一个桌面软件,Electron 几乎是绕不开的选择。像 VS Code、Claude 桌面版这些大家熟悉的工具,底层都是 Electron 在撑着。它的思路很简单:把 Chromium 浏览器引擎和 Node.js 运行时一起打包进去,这样你的网页代码就能像本地软件一样跑起来。
但这个做法有一个代价——体积大。一个简单的 Electron 应用,安装包轻松超过 100 MB。后来出现了 Tauri,它用系统自带的 webview 来渲染界面,不打包 Chromium,所以体积小很多。但 Tauri 要求你写 Rust 后端代码,这对很多前端开发者来说,是个不小的门槛。
现在 Deno 2.9 给出了一条新路子。
Deno desktop 是什么
Deno 2.9 版本新增了一个实验命令 deno desktop。它的作用是:把你现有的前端项目——不管是 React、Vue、Next.js 还是 Astro——直接转成一个桌面应用,输出是一个可以直接运行的 .exe 或 .app 文件。整个过程不需要你写任何 Electron 样板代码,也不需要配置打包工具。
Deno 的做法是,自己充当运行时,同时负责打开一个窗口来显示你的页面。窗口默认用的是操作系统自带的 webview——Windows 上是 WebView2,macOS 上是 WebKit。这样打包出来的文件非常小,启动也快。如果你需要所有平台显示效果完全一致,也可以选择打包 Chromium,但体积会大一些。
使用方式很简单。你可以在代码里用 Deno.serve() 启动一个服务,然后运行 deno desktop 命令,它就会自动打开一个窗口来显示这个服务。如果你的项目里已经有 Next 或 Nuxt 这类框架,Deno 也能自动识别,直接构建并包装成桌面应用。
另外,Deno 还提供了一套原生的桌面 API,比如控制窗口大小、菜单栏这些,不用额外装包就能用。
最方便的一点是交叉编译。你在一台电脑上就能同时生成 Windows、Linux 和 macOS 的安装包,不需要每换一个平台就折腾一遍编译环境。
和 Electron、Tauri 比一比
先把结论放前面:Deno desktop 目前还是实验功能,不建议直接用在正式产品上。但它确实提供了一个新的选择。
| 对比项 | Electron | Deno | Tauri |
|---|---|---|---|
| 编程语言 | JavaScript / TypeScript | JavaScript / TypeScript | Rust + JavaScript / TypeScript |
| 渲染引擎 | Chromium | 可选 webview 或 Chromium | 系统 webview |
| 各平台渲染一致 | 一致 | 选 Chromium 时一致,选 webview 时不完全一致 | 不完全一致 |
| 兼容 Node 生态 | 支持 | 支持 | 不支持 |
| 单机交叉编译 | 支持 | 支持 | 需要目标平台环境 |
| 自动识别前端框架 | 不支持 | 支持 | 不支持 |
| 支持 iOS / Android | 不支持 | 不支持 | 支持 |
从这个表能看出来,Deno 的定位其实很明确:
适合不想学 Rust,又想用纯前端技术做桌面应用的人
适合已经有一个 Next、Nuxt 或 Astro 项目,想快速给它套个桌面壳子的人
适合需要从一台电脑同时编译多个平台版本的人
如果你需要移动端支持,那还是得看 Tauri
实际使用中的感受
目前这个功能刚出来,稳定性和周边工具链还在完善中。比如自动更新、应用签名这些生产环境必须的功能,还没有 Electron 那么成熟的方案。但它的方向是对的——降低桌面应用开发的门槛,让前端开发者用自己最熟悉的工具链就能完成工作。
如果你现在正在做一个内部工具,或者想快速验证一个桌面产品的原型,Deno desktop 值得试一试。它省去了配置 Electron 的繁琐步骤,也不需要你为了体积去啃 Rust。等它后续版本把自动更新、签名这些补齐了,应该会是一个很有竞争力的选择。
对于个人开发者或者小团队来说,能用更少的精力做出一个跨平台桌面应用,这本身就是件好事。Deno 走了一步很多人想了很久的棋,接下来就看社区怎么接住它了。
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!