宿主扩展工具 swan-extension-cli
介绍
swan-extension-cli 是一个面向开源宿主,扩展 extension 特色能力的自动化工具,提供:
- 交互式的项目脚手架。
- 一套标准化的宿主扩展模板,包括 API、组件能力的扩展。
- 生成复杂能力模板的简易命令。
- 一个运行时服务环境,该服务支持:
- 基于 webpack 的打包构建功能,可产出 extension 编译产物;
- 可本地调试。
swan-extension-cli 致力于为开源宿主扩展能力提供标准化的基础工具,开发者可以专注于开发能力上,而不必纠结于如何应用。
安装
预备环境
nodejs > 10.0.0
安装 cli
下载工具包之后,解压包,操作如下图:
包目录结构如下
1 | cli.zip |
执行以下命令
cd cli
// 将 ext 命令链接到全局
sudo npm link
如图所示为执行成功
Tips:ext 命令可在全局使用,建议避开 cli 目录
使用
安装之后,可以用下列命令检查版本是否正确
ext --version
// or ext -v
可以通过下列命令查看帮助
ext --help
// or ext -h

Init 初始化项目
快速创建
ext init
// or ext i
在当前目录下,创建的为百度小程序宿主扩展包项目。
示例
1 | # 创建项目 |

如果我们创建一个只扩展了 API 能力的基础项目 swan-ext ,那么项目结构如下:
1 | swan-ext |
Tips:下面所有命令都要基于 swan-ext 这个项目根目录下执行。
add 添加模板
当你使用 ext init 来创建一个新项目的时候,有些模板会根据你选择的被预安装好。如果你想在一个已经被创建好的项目中添加其他模板,可以使用 ext add 命令,下面详细说下用法。
使用命令
// 基于 swan-ext 项目根目录
cd swan-ext
ext add <template>
template 参数说明
- api:拉取扩展 API 能力模板到当前目录
- component: 拉取扩展组件模板到当前目录
示例
1 | # 添加 API 扩展模板 |
如下图所示,我们在 swan-ext 项目中添加组件模板,那么 /src 下会出现 component 文件夹。

generate 生成模板/描述表
在一个已经创建好的项目中,当你作为一个不懂前端的小白,可能无法区分扩展能力属于哪一个类别,对应写在哪个文件里。在已经理解什么是扩展 API 的基础上,我们可以使用 ext generate 命令,来生成对应的能力模板。下面详细说下用法。
使用命令
// 基于 swan-ext 项目根目录
cd swan-ext
ext generate <option> // or ext g <option>
option 参数说明
- –desc, -d 生成 API 的客户端描述表,
- –method, -m 生成扩展复杂 API 的方法函数。
示例 1
1 | # 生成单个 API 的描述表 |
ext generate –desc 可以生成规范的描述表,存放在当前目录下的 descriptions 文件夹中。

生成成功后,进入相应的 json 文件中查看,描述表如下图:

示例 2
1 | # 生成单个复杂 API 的 method 文件 |
ext generate –method 可以生成某种类型的扩展 API 的模板,详见扩展方式详述,并存入项目中对应的目录。
举例我们生成一个有复杂上下文逻辑的 method:

生成成功后,进入相应的文件中查看,method 如下图,宿主可在该文件中进行能力的编写:

check 校验格式
因为描述表配置错误,会造成该能力不可用。而 canIUseMap 格式不合规范,会造成该能力被判断为不可用。
因此,在开发过程中,请及时校验描述表 / canIUseMap 的格式是否正确,避免影响功能使用。
可以使用 ext check 命令,下面说下详细用法。
使用命令
// 基于 swan-ext 项目根目录
cd swan-ext
ext check <option> <filePath>
/**
* - option:校验文件的类型,必传。文件类型包括:描述表、canIUseMap。
* - filePath:校验文件的路径,只支持本地路径。
* - 校验描述表时必传。
* - 校验 canIUseMap 时,若没有指定文件路径,默认寻找当前模板下的固定文件路径。
* - 文件需为 json 格式,否则无法校验。
*/
option 参数说明
- –desc, -d 校验描述表
- –caniuse, -c 校验 canIUseMap
示例 1
1 | # 校验描述表是否符合规范 |

示例 2
1 | # 校验 canIUseMap 是否符合规范,不填路径默认查找当前项目中的 can i use |

build 打包
ext build 用于开发 / 生产环境打包,打包产出的 extension 包可用于调试 / 发布,下面说明详细用法。
Tips:确保 swan-ext 这个项目根目录安装了依赖,若无请执行
npm i。
使用命令
// 基于 swan-ext 项目根目录
cd swan-ext
ext build <option>
option 参数说明
- –dev, -d 开发环境打包
- –prod, -p 生产环境打包
示例
1 | # 打出开发环境可用的宿主扩展包 |
如下图,打包成功后,在项目的 output 目录下可看到 extension.zip 包,里面包含了 extension.js 和 extension.css 文件。

将该 zip 包发布上线即可使用。
serve 本地调试
ext serve 是启动本地调试服务,下面说明详细用法。
Tips:确保 swan-ext 这个项目根目录安装了依赖,若无请执行
npm i。
使用命令
// 基于 swan-ext 项目根目录
cd swan-ext
ext serve [option]
option 参数说明
- –port -p
指定服务端口,默认 8080
示例
1 | # 启动本地调试服务,默认打包上传 http://localhost:8080 |
启动本地服务,这个过程需要等待几分钟。

编译成功会产出宿主扩展包 extension.zip 的二维码,已经宿主调试工具小程序的二维码。

宿主替换 extension 包成功后,冷启宿主 app,即可生效。
