On this page
框架
deno desktop 随 Deno v2.9.0 发布,目前尚未进入稳定版。要立即试用,
请运行 deno upgrade canary 以安装
canary 构建版本。该命令、配置键以及
TypeScript API 在该功能稳定之前仍可能发生变化。
将 deno desktop 指向某个目录后,它会自动检测框架,选择正确的入口点,将构建输出嵌入二进制文件,并运行该框架的生产服务器(或在 --hmr 下运行开发服务器),同时让 webview 指向它。
# 在 Next.js / Astro / Fresh / 等项目中:
deno desktop .
无需代码更改,也无需特殊适配器。能作为 Web 应用运行的同一个项目,也可作为桌面应用发布。
检测 Jump to heading
检测基于配置文件和 package.json 依赖项。匹配到的第一个结果生效。
| 框架 | 通过以下内容检测 |
|---|---|
| Next.js | next.config.{js,mjs,ts} |
| Astro | astro.config.{mjs,ts,js} |
| Fresh | fresh.gen.ts 或 _fresh/ 目录 |
| Remix | package.json 中的 @remix-run/react 或 @remix-run/dev |
| Nuxt | nuxt.config.{ts,js,mjs} |
| SvelteKit | svelte.config.{js,ts} |
| SolidStart | package.json 中的 @solidjs/start |
| TanStack Start | package.json 中的 @tanstack/{react,solid}-start |
| Vite(SSR 模式) | vite.config.* 加上一个 server.{js,ts,mjs} 入口 |
如果都不匹配,deno desktop 会回退为将该路径视作脚本,这与 deno desktop main.ts 相同。你可以编写一个
Deno.serve() 处理程序并自行提供 UI。
检测会做什么 Jump to heading
当检测到框架时,CLI 会:
- 生成一个合成入口点,用于导入框架的生产服务器(或在
--hmr下导入开发服务器)。 - 将构建输出嵌入 二进制文件的虚拟文件系统(VFS)中(
.next/、dist/、.output/、_fresh/、build/等,具体取决于框架)。 - 在运行时自解压 VFS,使框架代码能够在其自身工作目录的相对位置找到构建输出。Next.js 在
.next/下查找,Astro 在dist/下查找,依此类推。 - 运行框架服务器 作为你的
Deno.serve()处理程序。webview 会像任何其他桌面应用一样导航到绑定的端口。
在运行 deno desktop 之前,请先构建你的项目。它不会替你运行 next build、
astro build 之类的命令,因此请先执行框架的构建步骤。
各框架说明 Jump to heading
Next.js Jump to heading
cd my-next-app
npx next build # 生成 .next/
deno desktop .
生产环境:导入 next/dist/cli/next-start.js。开发环境(在 --hmr 下):
next/dist/cli/next-dev.js。.next/ 目录会被嵌入。
App Router 和 Pages Router 都可正常工作。
Astro Jump to heading
npm run build # 生成 dist/
deno desktop .
带有 SSR 适配器的 Astro 项目会导入 ./dist/server/entry.mjs。静态项目(无适配器)则通过 Deno 的静态文件服务器提供服务,指向 dist/。
这两种模式都可用;SSR 可以访问完整的 Astro 请求生命周期,静态模式启动更快。
Fresh Jump to heading
deno task build # 生成 _fresh/
deno desktop .
Fresh 2.x:导入 _fresh/server.js,并在 --hmr 下运行 Vite 开发服务器。Fresh 1.x:直接导入 ./main.ts。
Remix Jump to heading
npm run build
deno desktop .
生产环境:针对 build/ 目录运行 remix-serve。开发环境(在 --hmr 下):运行 @remix-run/dev CLI。
Nuxt Jump to heading
npm run build # 生成 .output/
deno desktop .
使用 Nuxt 的 Nitro 输出,位于 .output/server/index.{ts,mjs}。开发环境(在 --hmr 下):nuxi dev。
SvelteKit Jump to heading
npm run build
deno desktop .
首先查找 .deno-deploy/server.ts(Deno Deploy 适配器的输出),如果没有,再回退到 .output/server/index.{ts,mjs}(Node 适配器的输出)。开发环境:Vite 开发服务器。
如果你使用了其他适配器(@sveltejs/adapter-static 等),请直接用 Deno.serve() 自行提供输出目录服务,而不要依赖检测。
SolidStart 和 TanStack Start Jump to heading
二者底层都使用 Nitro 框架;检测会通过 .output/server/index.* 入口处理它们。运行 deno desktop 前请先构建(npm run build)。
Vite SSR Jump to heading
带有自定义 SSR 入口(server.ts、server.js、server.mjs)的普通 Vite 项目,只要同时存在 vite.config.*,就可以配合 deno desktop 使用。生产环境会直接运行 SSR 入口;开发环境(在 --hmr 下)会以 middleware 模式运行 Vite 开发服务器。
强制指定框架或选择退出 Jump to heading
没有用于强制检测的标志。若要选择退出(即在不使用检测的情况下发布框架项目),请传入一个显式脚本入口:
deno desktop ./my-server.ts
在 my-server.ts 中,你需要自行导入并启动框架。当你需要检测无法表达的启动控制时,请使用这种方式。
框架项目中的热重载 Jump to heading
在 --hmr 下,会运行框架自身的开发服务器,webview 会直接连接到它。状态保持、快速刷新和错误覆盖层的表现都与浏览器中相同。有关框架和非框架 HMR 模式的详细信息,请参见 HMR。