BlackHalo logo
Published on

Deno Desktop:用Web技术构建原生桌面应用

Authors
  • Name
    GeneralMaximus
    docs.deno.com
Deno Desktop 的示意图,展示一个桌面窗口内运行着 Deno 应用
头图来源: 来源页面

概述

Deno Desktop 是 Deno 运行时团队在 v2.9.0 中推出的新特性,旨在让开发者能够利用 Web 技术(HTML、CSS、JavaScript/TypeScript)构建真正的桌面应用程序。它并非一个独立的框架,而是 Deno 内置的一套工具链和 API,能够将任何 Deno 项目——无论是简单的 TypeScript 脚本,还是基于 Next.js、Astro、Fresh 等现代框架的 Web 应用——编译成一个可分发、自包含的桌面二进制文件。每个平台(macOS、Windows、Linux)都会生成对应的捆绑包,其中包含你的代码、Deno 运行时以及一个 Web 渲染引擎。

为什么选择 Deno Desktop

Web 技术是世界上最广为人知的 UI 工具包。基于 Web 栈构建桌面应用(如 Electron、Tauri、Electrobun)利用了这一点,但每种方案都有其权衡:巨大的二进制体积、缺失的平台支持、没有 JavaScript 生态、缺乏内置更新机制、没有框架集成。Deno Desktop 对这些权衡做出了明确的取舍:

  • 默认小巧,完全兼容 Node:默认的 WebView 后端使用操作系统自带的 WebView,生成的二进制体积很小;同时通过 Deno 的 Node 兼容层,你可以使用整个 npm 生态。
  • 可选 Chromium(CEF)后端:当需要在 macOS、Windows、Linux 上获得完全一致的渲染效果时,可以切换到捆绑的 Chromium 后端。
  • 框架自动检测:只需将 Deno Desktop 指向一个 Next.js、Astro、Fresh、Remix、Nuxt、SvelteKit、SolidStart、TanStack Start 或 Vite SSR 项目,它就会自动运行:生产模式下启动生产服务器,--hmr 模式下启动开发服务器并支持热重载。无需修改任何代码即可将现有 Web 项目带到桌面。
  • 进程内绑定而非 IPC:后端与 UI 之间的通信通过进程内通道进行,而非基于套接字的 IPC。虽然值在跨越调用边界时仍会编码,但 Deno 代码与 WebView 之间没有跨进程往返。
  • 单机交叉编译:同一台机器可以为 macOS、Windows 和 Linux 构建应用。后端按需下载,而非本地编译。
  • 内置二进制差异自动更新:只需提供一个 latest.json 清单文件和 bsdiff 补丁,运行时就会自动轮询、应用更新,并在启动失败时自动回滚。

Hello, Desktop:快速上手

创建一个单文件桌面应用非常简单。以下是一个完整的 main.ts 示例:

Deno.serve(() => new Response("<h1>Hello, desktop</h1>", {
  headers: { "content-type": "text/html" },
}));

然后运行命令:

deno desktop main.ts

编译后的二进制文件会打开一个窗口,指向一个绑定到 Deno.serve() 处理器的本地 HTTP 服务器。可以直接运行生成的二进制文件:

./main  # macOS / Linux
main.exe  # Windows

Deno.serve() 会自动绑定到 WebView 导航到的地址,因此无需手动指定端口或主机名。

功能模块详解

Deno Desktop 的文档将后续内容分为多个小节,涵盖从配置到分发的方方面面:

  • 配置:在 deno.json 中使用 desktop 块进行配置。
  • 后端:CEF、WebView、Raw 三种后端的选择指南。
  • HTTP 服务Deno.serve() 的集成与服务模型。
  • 框架支持:Next.js、Astro、Fresh、Remix、Nuxt、SvelteKit 等框架的集成方式。
  • 窗口管理Deno.BrowserWindow 的生命周期、多窗口支持、事件处理。
  • 绑定:通过 bindings.<name>() 从 WebView 调用 Deno 代码。
  • 菜单:应用菜单和上下文菜单。
  • 托盘与 Dock:系统状态图标和 macOS Dock 支持。
  • 对话框prompt()alert()confirm() 的原生弹窗实现。
  • 通知:通过 Web Notification API 发送原生 OS 通知。
  • 热模块替换--hmr 模式支持框架和非框架应用的热重载。
  • 开发者工具:统一的 DevTools,同时附加到 Deno 运行时和 WebView。
  • 自动更新Deno.autoUpdate() API、清单文件、bsdiff 补丁、回滚机制。
  • 错误报告:捕获未捕获的异常和崩溃。
  • 分发:交叉编译、输出格式、安装程序生成。
  • 对比:与 Electron、Tauri、Electrobun、Dioxus 的异同。
  • CLI 参考deno desktop 命令及其标志,以及 deno.json 中的 desktop 模式。

总结

Deno Desktop 为 Web 开发者提供了一条低门槛进入桌面应用开发的路径。它保留了 Web 技术的易用性和生态,同时通过进程内绑定、原生 WebView 和内置自动更新等特性,解决了传统方案中常见的体积、性能和分发问题。目前该功能仍处于 canary 阶段,但已经展现出巨大的潜力。对于希望将现有 Web 项目快速转化为桌面应用,或者想要用熟悉的技能构建原生体验的开发者来说,Deno Desktop 是一个值得关注的新选择。

原标题:Deno Desktop。 HN 原始发布时间:2026年6月22日星期一。当前记录为 1033 分、372 条评论。

阅读原文 · 查看 HN 讨论