17611538698
info@21cto.com

Deno Desktop:使用 TypeScript 即可构建原生应用程序

前端 0 12 1小时前
图片

导读:Deno 2.9 为我们提供了一个新的桌面应用程序框架,可以将 TypeScript 项目编译成带有 WebView 或捆绑 Chromium 的原生二进制文件。这也是 Deno 团队推出的 Electron 的全新替代方案。

Deno 最近发布了Deno Desktop,这是一款使用TypeScript和Web技术构建跨平台桌面应用程序的框架。

它已经在Deno 2.9.0的canary版本里提供,可以将Deno项目编译成一个原生应用程序包,其中包含你的源代码、Deno运行时以及系统WebView或捆绑的Chromium运行时。

图片

这条消息曾一度登上了Hacker News网站的首页,而这里真正有价值的讨论并非“Web UI 是好是坏?”,而是更为实际的问题:“如若你的团队已经在使用 TypeScript 进行开发,那么 Deno Desktop 是否比 Electron 或 Tauri 更能提供一条通往本地开发工具的清晰路径?”

这个问题对人工智能开发工作也相当重要。

许多新型开发者工具并非传统的消费级桌面应用程序,而是本地仪表盘、代理工作台、后台运行程序、提示符检查器、文件系统感知编辑器和操作员控制台。这些工具与我们之前在TypeScript AI 代理堆栈便携式终端代理本地编码代理工作区中讨论的领域非常接近。

Deno Desktop 的有意思之处在于,它将本地 TypeScript 界面转化为可以打包的工具。

Deno Desktop 的实际功能


Deno Desktop 可以将 Deno 项目转换为适用于 macOS、Windows 或 Linux 的可再发行应用程序。输出结果包括:

  • 你的应用程序代码
  • Deno运行时
  • 渲染后端
  • 权限选择在编译时内置
  • 可选的捆绑资源和框架输出


该框架可自动检测包括Next.jsAstro、Fresh、Remix、Nuxt、SvelteKit、SolidStart、TanStack Start 和 Vite SSR 项目在内的主流 Web 框架。如果你的应用运行在支持这些框架的环境下,Deno.serve()与WebView 无需手动配置端口即可连接到本地服务器。

两种主要的渲染路径分别是:

  1. 系统 WebView - 使用操作系统的 WebView,这样可以减小二进制文件的大小,并且外观更接近 Tauri 架构。
  2. 通过 CEF 捆绑 Chromium - 为应用程序提供一致的浏览器引擎,更接近 Electron 的权衡。


系统 WebView 方案采用的是轻量级方案,而 CEF 方案则是一致性方案。这种选择体现了整个Deno Desktop产品故事的精髓:它并非试图消除 Web 与桌面之间的权衡取舍,而是为 TypeScript 团队提供了一个 Deno 官方的权衡方案。

开发者们正在讨论什么


Hacker News 上的讨论是很有用的,因为它揭示了团队在采用这项技术之前真正会遇到的反对意见。

Web 技术仍然不是原生 UI 工具包。基于 WebView 构建的桌面应用程序通常会缺失平台特定的交互细节、辅助功能默认设置、键盘行为和系统约定。Deno Desktop 也无法改变这一点,如果产品需要深度原生 UI,那么这条路仍然走错了方向。

将 Tauri 与 Deno Desktop 进行比较不可避免。Tauri已经为团队提供了一个系统 WebView 以及一个原生后端(通常是 Rust)。Deno Desktop 的不同之处在于,它的后端仍然使用 TypeScript,并且运行在 Deno 平台上。对于那些不想为了发布内部工具而使用 Rust sidecar 的团队来说,这无疑是一个极大的简化。

Chromium 内核包其实并非完全“免费”。

Deno的对比页面显示,WebView 应用的大小约为 40 MB,而基于 Chromium 内核的应用的大小约为 150 MB(不包括你自己的应用代码和资源)。

一位 Hacker News 用户这样评论道,即使是很小的测试应用,在 macOS 本地运行时也会占用更大的磁盘空间。因此,要将应用大小作为你发布版本中需要衡量的指标,而不是一个固定的市场推广指标。

另外,权限也会成为发布版本的一部分考量。

Deno的技术文档这样指出道,编译时授予的权限会被嵌入到编译后的二进制文件中。这符合 Deno 的安全模型,但也意味着团队应该像记录环境变量、更新通道和自动启动行为一样,记录权限信息。

为什么它更符合AI工具发展的当下趋势


Deno Desktop 的目标市场并非仅限于消费者应用。它早期更合适的目标群体或许是日益壮大的本地开发者工具类应用。

想想开发者们围绕智能体构建的工具有哪:

  • 一个本地提示评估控制台,用于读取存储库并写入报告。
  • 用于切换服务提供商的模型路由器仪表板
  • 一款具备文件系统感知能力和集成用户界面的编码助手。
  • 一个部署检查器,用于跟踪日志并存储本地状态
  • 单个团队的私有管理界面


这些工作流程看起来更像是代理工作区契约OpenCode 风格的本地代理循环,而不是成熟的原生应用。它们需要文件访问权限、类似 Shell 的功能、本地存储、可预测的打包方式,以及开发者可以快速迭代的用户界面。

这就是“从头到尾使用 TypeScript”的优势所在。你可以在服务器、浏览器和打包的桌面环境之间共享验证代码、模式、API 客户端、模型路由工具和 UI 组件。如果您的团队已经在评估TypeScript 代理框架,那么桌面封装就成为另一个分发目标,而不是一个独立的工程体系。

Deno Desktop、Electron 和 Tauri的区别


我们做出如下表格来进行比较:

工具最佳匹配主要权衡
Electron
成熟的桌面应用程序,具有 Chromium 内核的一致性,并拥有庞大的生态系统。尺寸更大的运行时环境,Node+Chromium封装,更繁重的更新
Tauri可以使用系统 WebView 并受益于 Rust 后端的小型应用程序对于大量使用 TypeScript 的团队来说,Rust/原生桥接的复杂性问题较多
Deno Desktop以 TypeScript 为先导的 Deno 应用、内部工具、代理工作台和本地仪表板处于金丝雀阶段,生态系统尚不成熟,实际软件包大小仍需要验证


Electron 仍然是严肃的基于 Web 的桌面应用程序的默认选择。

因为它更成熟、文档齐全且经过广泛测试。Tauri 在注重小型二进制文件和原生集成时仍然很有吸引力。当后端逻辑已经使用 TypeScript 编写、团队喜欢 Deno 的权限模型,并且应用程序更接近于开发者工具而非消费级原生应用程序时,Deno Desktop 就变得有趣起来。

更值得一看的技术说明

关于编译路径:文档中展示了 Deno Desktop 的编译路径

deno compile --desktop

这表示着,我们应该将其视为 Deno 编译过程的一部分,而不是一个独立的桌面框架。

关于框架检测功能: Deno Desktop 可以检测多种现代 Web 框架。这一点很重要,因为许多内部工具最初都是以 Web 应用程序的形式存在的,之后才有人需要本地打包版本。

关于后端:Deno 文档介绍了 WebView、CEF 和更底层的后端选项。对于大多数团队来说,对于较小的软件包,他们会选择 WebView;而对于浏览器兼容性,则会选择 CEF。

绑定: Deno 的文档将后端到 WebView 的通信描述为绑定,而不是基于Socket的进程间通信 (IPC)。这对于需要频繁进行前端到运行时调用的本地工具来说很有前景,但目前还处于早期阶段,团队应该根据实际工作负载进行基准测试。

自动更新: Deno Desktop 内置了热更新系统,支持二进制差异比较和回滚功能。对于内部工具而言,这是一项至关重要的功能,因为分发和更新的可靠性正是许多“快速桌面应用”实验失败的关键所在。

一些实用的建议


Deno Desktop 并非重写现有 Electron 应用的理由。如果你的技术团队熟悉 Rust,它也不是放弃 Tauri 的理由。

此外,它目前还不具备生产环境稳定性。但如果你的作品正是这种形式,那就绝对值得一看:

  • 该产品是开发者工具、内部工具或代理工作台。
  • 团队已经在使用 TypeScript 编写代码,因此希望避免使用第二种后端语言。
  • 该应用需要访问本地文件或系统。
  • 网页用户界面是可以接受的。
  • 包装比深层原生抛光更重要


这确实是一个值得关注的类别。随着人工智能编码工具变得更加本地化、更贴合工作空间、更易于操作,打包层的重要性再次凸显。Deno Desktop 让 Deno 在这一领域占据了一席之地。

Deno Desktop 入门


如果你很想尝试一下,请先安装 canary 版本并编译一个小应用程序,然后再引入完整的框架。如下代码:

deno upgrade canarydeno compile --desktop your-app.ts

可以充分测量你关注的每个平台上的输出大小,还有检查编译期间授予的权限标志。在将其作为生产分发路径之前,多测试其更新行为。

常见问题


Deno Desktop 是否已准备好投入生产环境?


目前来看尚未准备好。

当前的 Deno Desktop 信息尚基于 Deno 2.9.0 canary 版本和预稳定版文档。现在用它来做原型设计是合适的,但关键的桌面应用程序应该等待更稳定的版本说明、迁移指南与实际打包示例。

Deno Desktop 与 Electron 有何不同?


Electron 将 Chromium 与Node.js结合使用,拥有成熟的桌面生态系统。

Deno Desktop 将 Deno 与渲染后端结合使用,可以使用系统 WebView 或通过 CEF 集成的 Chromium。其吸引力在于 Deno 原生的 TypeScript 运行时以及 Deno 的编译和权限模型。

Deno Desktop 与 Tauri 有何不同?


Tauri 通常使用系统自带的 WebView 和 Rust 后端。

Deno Desktop 也可以使用系统自带的 WebView,但 Deno 上的应用程序逻辑仍然使用 TypeScript 编写。这对于大量使用 TypeScript 的团队来说更简单,而 Tauri 则更适合那些想要成熟的 Rust 原生桌面技术栈的团队。

Deno Desktop 是否保留 Deno 的权限?


编译参考文档这样指出道,编译时授予的权限会被写入编译后的二进制文件中。请将此纳入自己的发布检查清单。打包的桌面应用程序应该便于维护人员审核其文件、网络、环境和子进程的访问权限。

作者:洛逸

评论

我要赞赏作者

请扫描二维码,使用微信支付哦。

分享到微信