On this page
桌面应用
deno desktop 会将一个 Deno 项目(从单个 TypeScript 文件到 Next.js 应用都可以)转换为一个自包含的桌面应用。输出结果是一个可重新分发的二进制文件,它会将你的代码、Deno 运行时以及一个 Web 渲染引擎打包到适用于各个平台的 bundle 中。
为什么选择 deno desktop Jump to heading
Web 技术是全世界最广为人知的 UI 工具包。基于 Web 技术栈构建的桌面应用(Electron、Tauri、Electrobun)都能利用这一点,但它们各自也都有你不得不接受的取舍:庞大的二进制文件、平台支持缺失、没有 JavaScript 生态、没有内置的更新方案、没有框架集成。
deno desktop 对这些取舍有明确立场:
- 默认体积小,完全兼容 Node。 默认的 WebView 后端使用操作系统自带的 WebView,以生成体积更小的二进制文件,同时你仍然可以通过 Deno 的 Node 兼容层使用完整的 npm 生态系统。当你需要在 macOS、Windows 和 Linux 上实现一致的渲染效果时,可以选择内置的 Chromium(CEF)后端。
- 框架自动检测。 将
deno desktop指向 Next.js、Astro、Fresh、 Remix、React Router、Nuxt、SvelteKit、SolidStart、TanStack Start 或 Vite SSR 项目即可运行:发布模式下运行生产服务器,在--hmr下运行支持热重载的开发服务器。大多数框架无需特殊适配器;请参阅框架以了解各框架的具体要求。 - 使用进程内绑定,而非 IPC。 后端与 UI 之间通过进程内通道通信, 而不是基于套接字的 IPC。值在跨越调用边界时仍会进行编码,但 Deno 代码与 WebView 之间无需进行跨进程往返。
- 从一台机器进行跨平台编译。 同一台机器可以为 macOS、 Windows 和 Linux 构建。后端会按需下载,而不是在本地构建。
- 内置二进制差分自动更新。 发布单个
latest.json清单和 bsdiff 补丁;运行时会轮询、应用补丁,并在启动失败时自动回滚。
你好,桌面 Jump to heading
创建一个单文件桌面应用:
main.ts
Deno.serve(() =>
new Response("<h1>你好,桌面</h1>", {
headers: { "content-type": "text/html" },
})
);
›_
deno desktop main.ts
编译后的二进制文件会打开一个窗口,并指向一个本地 HTTP 服务器,该服务器绑定到你的
Deno.serve() 处理器。直接运行它:
›_
./main # macOS / Linux
.\main.exe # Windows
Deno.serve() 会自动绑定到 webview 导航所使用的地址,因此你无需传入端口或主机名。详见
HTTP 提供服务。
一个完整的示例 Jump to heading
有关使用 deno desktop 构建的完整、真实世界应用,请参阅
denidian:这是一款 Obsidian 风格的
笔记应用,支持 Markdown 笔记、[[wikilink]] 交叉链接以及力导向图视图。它刻意保持小巧——仅由一个
Deno HTTP 服务器和一个原生 HTML/CSS/JS 前端组成——并涵盖了通过
Deno.BrowserWindow 进行窗口管理、应用菜单、
--hmr 开发以及面向分发的打包。
本节内容 Jump to heading
- 配置:
deno.json中的desktop块。 - 后端:CEF、webview、raw;如何选择。
- HTTP 服务:
Deno.serve()集成和服务模型。 - 框架:Next.js、Astro、Fresh、Remix、 Nuxt、SvelteKit 及其他框架。
- 窗口:
Deno.BrowserWindow生命周期、多窗口、事件。 - WebGPU 渲染:在 raw 后端上使用 WebGPU 绘制到原生窗口。
- 绑定:通过
bindings.<name>()从 webview 调用 Deno 代码。 - 菜单:应用程序菜单和上下文菜单。
- 托盘和 Dock:系统状态图标和 macOS Dock。
- 对话框:作为原生弹窗的
prompt()、alert()、confirm()。 - 通知:通过 Web
NotificationAPI 实现的原生操作系统通知。 - 热模块替换:适用于框架应用和
非框架应用的
--hmr。 - DevTools:同时连接到 Deno 运行时和 webview 的统一 DevTools。
- 自动更新:
Deno.autoUpdate()、清单、bsdiff、 回滚。 - 错误报告:捕获未捕获的 异常和 panic。
- 分发:交叉编译、输出格式、安装程序。
- 比较:
deno desktop与 Electron、Tauri、Electrobun、Dioxus 的关系。 deno desktopCLI 参考:命令、 其标志以及deno.json的desktop架构。
Last updated on