app.json 配置
功能
app.json 是
bt_app 的桌面应用配置文件。它描述应用名称、窗口、入口、运行模式、图标、主脚本和打包资源。
如果项目根目录不存在
app.json,但存在
index.html,
bt_app 会按纯 HTML 项目自动生成配置。
完整示例
{
"app": {
"name": "Diary",
"title": "我的日记本",
"version": "1.0.0",
"description": "BT 桌面日记本示例",
"copyright": "Copyright 2026 BT",
"mode": "static",
"entry": "index.html",
"icon": "icon.ico",
"main": "main.bt",
"devtools": true,
"console": true
},
"window": {
"width": 900,
"height": 700,
"resizable": true,
"fullscreen": false,
"hide_titlebar": false,
"always_on_top": false
},
"resources": [
"app.json",
"index.html",
"icon.ico",
"main.bt",
"assets/**"
]
}
app 字段
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|
app.name | string | 否 | BTApp | 应用内部名称,也是默认打包输出文件名。只能是单个文件名片段,不能包含路径或 Windows 文件名非法字符。 |
app.title | string | 否 | BT 桌面应用 | 窗口标题。用户看到的应用名称通常写在这里。 |
app.version | string | 否 | 1.0.0 | 应用版本。当前主要用于配置记录。 |
app.description | string | 否 | 无 | 应用说明。Windows 打包时写入 exe 的 FileDescription 元信息。 |
app.copyright | string | 否 | 无 | 版权说明。Windows 打包时写入 exe 的 LegalCopyright 元信息。 |
app.mode | string | 否 | static | 运行模式,只能是 static、server、remote。 |
app.entry | string | 否 | 按模式决定 | 窗口入口。static 默认 index.html,server 默认 http://127.0.0.1:18280,remote 默认 https://example.com。 |
app.icon | string | 否 | 内置图标 | 项目内相对路径,当前只支持 .ico 文件。用于运行窗口图标和 Windows 打包 exe 图标。 |
app.main | string/boolean/null | 否 | 自动尝试 main.bt | 前端 window.bt.call() 可调用的 BT 主脚本。字符串表示指定脚本;false 或空字符串表示不执行;true、null 或省略表示自动查找 main.bt。 |
app.devtools | boolean | 否 | false | 是否允许打开 WebView 开发者工具。建议只在开发阶段开启。 |
app.console | boolean | 否 | true | 是否启用调试控制台。打包时为 false 会把 Windows exe 改为 GUI 子系统,双击时不弹控制台。 |
window 字段
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|
window.width | number | 否 | 800 | 主窗口初始宽度,单位为逻辑像素。写 0 会回退到默认值。 |
window.height | number | 否 | 500 | 主窗口初始高度,单位为逻辑像素。写 0 会回退到默认值。 |
window.resizable | boolean | 否 | true | 是否允许用户调整窗口大小。 |
window.fullscreen | boolean | 否 | false | 是否全屏启动。 |
window.hide_titlebar | boolean | 否 | false | 是否隐藏系统标题栏。隐藏后需要页面自己提供拖动、关闭等交互。 |
window.always_on_top | boolean | 否 | false | 是否置顶窗口,适合悬浮工具、监控面板等场景。 |
resources 字段
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|
resources | string[] | 否 | [] | 打包时进入 Bundle 的资源规则,支持普通相对文件、glob 和 assets/** 这类递归目录规则。 |
构建时还会自动补齐必要资源:
- 当前目录存在
app.json 时自动加入 app.json。
-
static 模式自动加入 app.entry 指向的入口文件。
-
app.main 自动模式下如果存在 main.bt,自动加入 main.bt。
- 指定
app.main 字符串时自动加入该脚本。
- 当前目录存在
server.bt 时自动加入 server.bt。
- 配置了
app.icon 时自动加入图标文件。
resources 只能写项目内相对路径,不能写绝对路径,不能包含
..。普通文件不存在会打包失败;目录本身会被忽略;
assets/** 会递归收集目录内文件。
纯 HTML 的 bt-app 标签
纯 HTML 项目没有
app.json 时,可以在
index.html 中写
<bt-app>:
<bt-app
app_name="HtmlDemo"
app_version="1.0.0"
app_description="HTML 桌面应用"
app_copyright="Copyright 2026 BT"
app_icon="logo.ico"
app_devtools="true"
window_width="900"
window_height="700"
window_resizable="true"
window_fullscreen="false"
window_hide_titlebar="false"
window_always_on_top="false"
resources="logo.ico|style.css|main.js|assets/**">
</bt-app>
app.json 的
resources 使用 JSON 数组;
<bt-app> 标签的
resources 使用
| 分隔。纯 HTML 项目还会自动扫描
link[href]、
script[src]、
img[src]、
source[src]、
iframe[src]、
audio[src]、
video[src] 和
video[poster] 中的本地相对资源。
注意事项
-
app.name 和 app.title 不同:name 更偏内部名称和输出文件名,title 是窗口标题。
-
server 模式下 app.entry 不是 server.bt,而是窗口要打开的 HTTP 地址。
- 当前版本
app.icon 只接受 .ico,不要把 .png、.icns 写成已支持图标。
- 远程页面当前也会注入
window.bt,只应加载可信地址。