开发

组件模块(Swan-Module)

1 简介

是小程序框架所包含某个组件的抽象,以不含版本号的 maven 坐标为 id,其内容有二进制组件和源码工程两种表现形式。

2 调用组件模块

宿主可用 maven gav id 的形式直接调用组件模块,但宿主应该尽量避免在dependencies {}块中直接调用 gav 形式的组件id,而应采用组件依赖
的形式间接调用。

注:如发生组件冲突,需要 exclude 组件的时需要用 gav 形式的调用

3 定义组件模块

可以通过以下两种方式定义:

  • Swan DSL 块中自定义
  • Nest 插件工程中预定义

3.1 Swan DSL 块中自定义

在宿主根目录settings.gradle文件中引用 Nest 插件,使用swan.customModules方法定义,示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
* 自定义 swan module 示例
* 可新增或者覆写默认的 module 配置
* 这里示例自定义 demo 工程的 swan 宿主接入层 module
*
* module definition: Map<Id, Module>
* Id: mvn id: "group:artifact" # map key 为自定义 module 的 id
* Module: depend config # map value 为自定义 module 的属性
* Module.ver: mvn version # 自定义 module 版本号
* Module.base: base dir of project of module src # 自定义 module 代码工程的 base
* Module.path: relative path of project path in base dir # 自定义 module 代码工程相对于 base 的路径
* Module.require: requirement condition list for build
*/
def swanModules = [
// 定义百度内部 demo 的小程序接入 module
"com.baidu.swan:bdhost" : [base: "internal", path: ["lib-swan-bdhost"]],
// 定义百度外部 demo 的小程序接入 module
"com.baidu.swan:openhost": [path: ["lib-swan-openhost"]],
]

/**
* nest 提供的 swan 编译配置 DSL 示例
*/
swan {
// 配置自定义 modules,接收字典对象,见自定义 module 示例
customModules swanModules
}

3.2 Nest 插件预定义

打开 Nest 工程,找到com.baidu.swan.nest.definition.Depends.kt文件,编辑defaultModules块,示例如下:

1
2
3
4
5
6
7
val defaultModules = {
"com.baidu.searchbox.components.nuomipay:core".swanModule { // 使用 id 得到 swan module 对象
ver = "LIB_NUOMI_PAY_VERSION".swanProp() // 预定义 module 的版本号
base = "third" // 预定义 module 代码工程的 base
path("lib-nuomi-pay", "lib-nuomi-pay-core") // 预定义 module 代码工程相对于 base 的路径
}
}

4 组件模块ID对照索引

Nest 插件提供了swanDeps task,供宿主对照索引,查询组件模块状态信息,以及对应的依赖引用,详细文档请参考:组件依赖id对照表