# 扩展打包与安装

## 功能

`bt ext` 是 BT 扩展工具链，用于创建扩展项目、构建 `.bts` 包、安装到项目、查看包信息和执行加载检查。

## 命令

```text
bt ext new <dir> [--kind bt|wasm]
bt ext build [dir] [-o <file.bts>]
bt ext install <file.bts> [project_dir]
bt ext info <file.bts>
bt ext check [dir|file.bts]
```

## 参数

| 命令 | 说明 |
| ------ | ------ |
| `new <dir>` | 创建扩展开发目录，默认生成 `kind=bt` 脚手架。 |
| `new <dir> --kind wasm` | 创建 WASM 扩展开发目录，生成 Rust SDK 脚手架。 |
| `build [dir]` | 从扩展开发目录打包 `.bts`，默认输出 `<manifest.name>.bts`。 |
| `build [dir] -o <file>` | 指定输出包路径，必须使用 `.bts` 后缀。 |
| `install <file> [dir]` | 校验包后复制到目标项目 `extensions/<manifest.name>.bts`。 |
| `info <file>` | 查看 manifest、权限、入口、对象和方法摘要。 |
| `check [dir|file]` | 校验开发目录或 `.bts` 包能被当前 BT 构建加载。 |

## 返回值

`bt ext` 是命令行工具，不向 BT 脚本返回值。命令成功时输出中文结果；命令失败时输出中文错误并返回失败状态。

## 打包规则

`bt ext build` 会收集开发目录中的普通文件，并跳过：

```text
target/
.git/
.hg/
.svn/
node_modules/
```

打包时会限制 `.bts` 包条目数量、单文件大小、总解压大小和包内路径。写出 zip 后，工具会回读 `.bts` 并初始化对应 Runner，确保包能被运行时加载。

## 安装规则

安装命令：

```text
bt ext install calc.bts project
```

会把扩展复制到：

```text
project/extensions/calc.bts
```

目标文件名来自 `manifest.name`，不是命令行传入的文件名。

## 代码示例

完整纯 BT 扩展流程：

```text
bt ext new calc
bt ext build calc -o calc.bts
bt ext check calc.bts
bt ext info calc.bts
bt ext install calc.bts project
```

安装后项目脚本调用：

```bt
result = calc(1).add(2).value()

// 输出：3
print result
```

## 注意事项

- `bt ext new` 不会覆盖非空目录。
- `bt ext build` 的输出路径如果位于开发目录内，工具会避免把输出包再次打进包里。
- `bt ext install` 会覆盖目标项目中同名 `.bts` 包。
- 扩展 CLI 命令成功时会向终端输出构建、安装或检查结果；失败时输出中文错误，不会生成可部分加载的 `.bts` 包。
- `bt ext` 需要运行用的 BT 构建启用 `extensions` feature。
