Skip to main content
On this page

桌面应用

deno desktop 会将一个 Deno 项目(从单个 TypeScript 文件到 Next.js 应用都可以)转换为一个自包含的桌面应用。输出结果是一个可重新分发的二进制文件,它将你的代码、Deno 运行时以及一个 Web 渲染引擎打包到每个平台的一个 bundle 中。

即将于 Deno 2.9 提供

deno desktop 将随 Deno v2.9.0 一同发布,但目前尚未进入稳定版。若想现在就试用,请运行 deno upgrade canary 来安装 canary 构建。该命令、配置键以及 TypeScript API 在该功能稳定之前仍可能发生变化。

为什么选择 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、Nuxt、SvelteKit、SolidStart、TanStack Start 或 Vite SSR 项目即可运行:发布模式下运行生产服务器,--hmr 下运行带热重载的开发服务器。无需修改代码,就能把现有 Web 项目带到桌面端。
  • 进程内绑定,而非 IPC。 后端与 UI 的通信通过进程内通道进行,而不是基于 socket 的 IPC。值在跨越调用边界时仍会被编码,但你的 Deno 代码与 webview 之间不会发生跨进程往返。
  • 单机跨编译。 同一台机器可以构建 macOS、Windows 和 Linux 版本。后端会按需下载,而不是在本地构建。
  • 内置基于二进制差分的自动更新。 只需发布一个 latest.json 清单和 bsdiff 补丁;运行时会自动轮询、应用更新,并在启动失败时回滚。

Hello, desktop Jump to heading

创建一个单文件桌面应用:

main.ts
Deno.serve(() =>
  new Response("<h1>Hello, desktop</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

Last updated on

Did you find what you needed?

编辑此页面
Privacy policy