# 运行模式 ## 功能 `app.mode` 控制 `bt-app` 如何准备资源、执行脚本和加载窗口入口。当前只支持 `static`、`server`、`remote`。 ## 对比 | 模式 | 入口示例 | 是否需要本地服务 | 是否适合打包 | 适合场景 | |---|---|---|---|---| | `static` | `index.html` | 否 | 是 | 纯静态页面、小工具、本地资源应用 | | `server` | `http://127.0.0.1:18280` | 是 | 是 | BT 后端加 Web 前端的桌面应用 | | `remote` | `https://example.com` | 否 | 是 | 远程 Web、SaaS 管理工具、云端页面壳 | ## static `static` 模式通过 `bt://app/...` 读取项目资源。 ```json { "app": { "mode": "static", "entry": "index.html" } } ``` 优点是部署简单,打包后不需要启动本地 Web 服务。缺点是页面不能依赖浏览器服务器环境特性,例如服务端路由需要前端自己处理。 ## server `server` 模式先执行项目根目录的 `server.bt`,再打开 `app.entry` 指定的 HTTP 地址。 ```json { "app": { "mode": "server", "entry": "http://127.0.0.1:18280" } } ``` `server.bt` 示例: ```bt net.listen({ type:'web', bind:'127.0.0.1:18280', sites:[ { domains:['127.0.0.1'], root:'www/', entry:'main.bt', static:{ route:'/static/{**}', path:'www/static/', default:'index.html' } } ] }) ``` 优点是可以使用完整 BT Web 服务能力。缺点是要管理端口,端口被占用会启动失败。 开发目录运行时修改 `server.bt` 或相关资源后,`bt-app` 会先停止旧 Web 服务,再重新执行 `server.bt` 并刷新窗口。修改监听端口时,需要同步修改 `app.entry`,否则窗口仍会打开旧地址。 ## remote `remote` 模式直接打开远程 URL: ```json { "app": { "mode": "remote", "entry": "https://example.com" } } ``` 远程入口模式下,软件壳本身可以保持稳定,业务页面部署在服务器端。开发者更新服务器内容后,用户再次打开应用即可使用新版本功能,不一定需要重新下载安装客户端。 当前版本 `remote` 页面同样会注入 `window.bt` 和窗口控制能力,只应加载可信远程页面。 ## server.bt 自动执行 除了 `server` 模式,只要项目资源中存在 `server.bt`,当前运行时也会尝试执行它。普通 `static` 或 `remote` 项目如果不需要本地服务,不要放置无用的 `server.bt`。