# 入口配置
## 功能
`app.entry` 决定窗口启动后加载什么页面。它的含义由 `app.mode` 决定。
## static 模式
`static` 模式加载项目内 HTML 文件:
```json
{
"app": {
"mode": "static",
"entry": "index.html"
}
}
```
相对路径以项目根目录为基准。默认 `index.html` 运行时会加载为根路径:
```text
bt://app/
```
这样 Vue Router `createWebHistory()` 这类前端路由能把初始路径识别为 `/`。其他入口文件会按实际路径转换,例如 `pages/start.html` 会转换为:
```text
bt://app/pages/start.html
```
路径必须是项目内相对路径,不能是绝对路径,不能包含 `..`。入口资源不存在时,窗口会显示启动错误页,提示 `入口资源不存在`。
## server 模式
`server` 模式固定执行项目根目录的 `server.bt`,窗口加载 `app.entry` 指定的 HTTP 地址:
```json
{
"app": {
"mode": "server",
"entry": "http://127.0.0.1:18280"
}
}
```
`server.bt` 中需要自己启动 Web 服务,并保证监听地址和 `app.entry` 一致。当前推荐使用 `net.listen({ type:'web' })`。
```bt
net.listen({
type:'web'
bind:'127.0.0.1:18280'
sites:[
{
domains:['127.0.0.1']
root:'www/'
entry:'main.bt'
}
]
})
```
## remote 模式
`remote` 模式直接加载远程 Web 地址:
```json
{
"app": {
"mode": "remote",
"entry": "https://example.com"
}
}
```
`remote` 模式的 `entry` 必须以 `http://` 或 `https://` 开头。
## 默认值
| 模式 | entry 默认值 |
|---|---|
| `static` | `index.html` |
| `server` | `http://127.0.0.1:18280` |
| `remote` | `https://example.com` |
## bt:// 地址
开发者通常不需要在 `app.entry` 中手写 `bt://`。`static` 模式会自动把相对入口转换为 `bt://app/...`。
`static` 模式下,无扩展名路径在资源不存在时会回退到入口 HTML,用于支持 SPA history 路由刷新;带扩展名的脚本、样式和图片不会回退。
页面内部可以引用:
```html
```
## 排查
- 本地入口打不开:检查 `app.mode` 是否为 `static`,`entry` 文件是否存在,路径是否没有 `..`。
- 本地服务打不开:检查 `server.bt` 是否存在,端口是否被占用,`net.listen` 监听地址是否和 `app.entry` 一致。
- 远程入口打不开:检查网络、证书、URL 是否能在普通浏览器打开。
- 入口路径不能访问项目外文件;开发目录和 Bundle 都会校验安全相对路径。