# 打包构建

## 介绍
bt_app 支持构建桌面项目为一个单文件程序。

## 执行打包
在项目目录运行：

```bash
./bt_app.exe build
```

如果当前目录没有 `app.json` 但存在 `index.html`，构建前会先生成默认 `app.json`。默认配置只包含 `app.json` 和 `index.html`，页面引用的其他资源需要手动写入 `resources`。

输出位置：

```text
dist/{app.name}.exe
```

构建时会先在 `dist` 中生成临时 exe，完成图标、元信息、Bundle 注入和读回校验后才替换最终输出。这样中途失败不会留下一个没有 Bundle 的半成品 exe。若 `dist/{app.name}.exe` 正在运行或被其他程序占用，构建会明确失败并提示先关闭目标程序后重试。

## 资源收集
`resources` 支持普通文件、目录和 glob：

```json
{
  "resources": [
    "index.html",
    "main.bt",
    "assets/**",
    "pages/*.html"
  ],
  "exclude": [
    "assets/test/**",
    "assets/*.bak"
  ]
}
```

构建阶段会自动加入必要资源，包括 `app.json`、`static` 入口、主脚本、`server.bt` 和图标。最终打包集合按 `resources - exclude` 计算，普通目录和 `assets/**` 都会递归收集目录下所有文件。

## 图标和元信息
配置 `app.icon` 后，构建会校验图标文件存在，并在 Windows 上写入输出 exe 的图标资源：

```json
{
  "app": {
    "name": "IconDemo",
    "icon": "logo.ico",
    "description": "图标示例",
    "copyright": "Copyright 2026 BT"
  }
}
```

当前 `app.icon` 只支持 `.ico`。`description` 和 `copyright` 会写入 Windows exe 版本资源。

## 控制台
`dev.console` 为 `false` 时，构建会把 Windows exe 子系统改成 GUI，双击运行时不弹出控制台。

```json
{
  "dev": {
    "console": false
  }
}
```

开发阶段建议使用 `dev.console:true`，便于查看启动摘要、错误和 `echo()` 输出。

## 其他命令
```bash
./bt_app.exe run
./bt_app.exe bundle-check
```

- `run`：运行当前目录项目。
- `bundle-check`：检查当前 exe 是否包含 Bundle，并打印 Bundle 文件列表。


## 平台说明
当前构建逻辑输出单个 `.exe` 文件，Windows 下会处理 GUI 子系统、exe 图标和元信息。
