@hyext/ext-sdk-basic
v1.5.33
Published
基础小程序SDK
Downloads
1,201
Keywords
Readme
Core·小程序 SDK
小程序初衷是为了解决跨平台开发问题,最终诉求是希望可以实现应用的一端开发多端适配。
但,小程序 SDK 作为这个流程中的核心,不可避免的承担了多端适配的任务,从而引申出一个千古难题:是分?是合?
分:接口数量、适配逻辑、对接平台、Demo 各不相同;
优点:代码独立,耦合性小,可以分工合作;
缺点:接口行为、传参、回参都有可能出现分歧,新的接口、适配每个端都要加一次,有重复工作量;合:接口的调用、传参、回参、行为逻辑、文档多端一致;
优点:一动全动,一荣俱荣,减少工作量;
缺点:一动全动,一损俱损,需要强心脏;综上所述取中庸:入口多端统一,适配各不相同;
开发思路
- 多端适配:
src/platfroms/[rn]
下是各个端的适配代码,最终将注册到 SDK 核心extsdk.core
; - 统一入口:
src/modules
下是所有要暴露的 API 接口,通过 SDK 核心回溯某个模块某个 APIextsdk.core.callEvent
; - 根据任务配置构建出不同平台的 SDK;
安装
npm i @hyext/ext-sdk-basic -S
引用
import extsdk, { baseUtil, EventManager } from '@hyext/ext-sdk-basic';
// 新增平台
extsdk.core.addPlatform({ adapter: {}, modules: {}});
// 注入自定义模块
extsdk.core.injectModules({'moduleName': { 'api': () => {}}});
// 事件Manager
const eventer = new EventManager();
eventer.on('action', () => {});
eventer.off('action', () => {});
eventer.emit('action', {});
// 基础工具
const foo = () => {};
console.log('baseUtil.isFun(foo): ', baseUtil.isFun(foo));
本地开发
npm run start
测试构建
npm run build:test
打包上线
npm run release
核心
基础思路
- API -> core -> platform
- 平台注入到核心中;
- API 通过核心调用平台;
接口 API:
- 所有 API modules
- 基础 API baseModules
核心 core:
- 回溯逻辑 upon
- 平台注入 inject
平台 platform:
- 适配器 adapter: 抽象与外层平台的通信,以及一些基础事件;
- 平台封装 common: 事件监听、平台可公用逻辑;
- 特有模块 modules: 业务代码及特殊处理逻辑;
可公用:
- 处理器 manager
- 工具库 util
可扩展:
- index.js 暴露可继承扩展内容
- 是否继承基础 SDK 的所有 API
- 是否继承基础 SDK 的平台
核心 core
// 添加平台
addPlatform(adataper: {}, modules: {});
// 注入模块
injectModules({})
// 回溯API
backTrackAPI(modulesName, api);
// 回溯调用
onEvent // 事件绑定,返回 Promise
offEvent // 事件解绑,返回 Promise
callEvent // 异步调用,返回 Promise
callEventSync // 同步调用
处理器 manager
EventManager
LogManager
WebSocketManager
TafManager
适配器 adapter
// 核心
core: {
onEvent // 默认事件绑定,异步 Promise,可选,回溯失败后调用
offEvent // 默认事件解绑,异步 Promise,可选,回溯失败后调用
callEvent // 默认调用逻辑,异步 Promise,可选,回溯失败后调用
callEventSync // 默认调用逻辑,同步,可选,回溯失败后调用
afterModlueTrack // 平台定义的回溯方法,查找modules失败后调用,要返回API
},
// 消息通信
messager: {
on // 监听父级消息
off // 取消监听
emit // 发送消息,不标记唯一
dispatch // 发送一般消息到父级,返回Promise,标记唯一
dispatchTaf // 发送Taf消息到父级
}
// 生命周期
lifeCircle: {
init
onLoad
}
// 全局报错监听
error
构建器 cli:
命令行:
- 开发:
extsdk start
- 打包:
extsdk build
- 上线:
extsdk deploy
- 声明文件:
extsdk dts
- 配置 JSON:
extsdk parse
- 创建 init
- 文档 doc
- Demo demo
- 测试用例 test
构建配置 project.config.json
{
"name": "项目名",
"version": "版本号",
"buildTarget": "命名空间",
"mainPath": "src",
"outputPath": "dist",
"releasePath": "release",
"modulesPath": "src/modules",
"platformsPath": "src/platforms",
"buildEntryPath": "src/entry",
"buildTasks": {
"任务名": {
"platform": {
"entry": "src/platforms/rn/index.js",
"buildTool": "metro"
},
"npmConfig": {
"name": "发布NPM包名"
}
},
"web": {
"platform": {
"entry": "src/platforms/web/index.js",
"buildTool": "webapck"
}
},
"pc": {
"platform": {
"entry": "src/platforms/pc/index.js",
"buildTool": "webapck"
}
},
}
}
错误信息 APIError
| 属性 | 类型 | 说明 | | ------- | ------ | -------------------- | | message | string | 错误信息 JSON 字符串 | | code | number | 错误码 | | msg | string | 错误信息 | | api | string | 报错接口 | | origin | any | 原始报错信息 | | stack | Array | 报错堆栈 |
错误码 code
前端错误码规范
错误码范围: 10000 ~ 29999
1**** 基础报错
- 10*** 接入报错
- 11*** 调用报错
- 12*** 事件报错
2**** 客户端报错
- 20*** RN 端相关报错
- 21*** Web 端相关报错
- 22*** PC 端相关报错
| 错误码 | 含义 | | ------ | ------------------------ | | 10000 | 中台: 未知平台 | | 10001 | 中台: 平台不可用 | | 11001 | 中台: 接口不支持 | | 11002 | 中台: 调用超时 | | 11003 | 中台: 参数错误 | | 12001 | 中台: 事件名为空 | | 12002 | 中台: 事件为空 | | 12003 | 中台: 事件不支持 | | 20000 | RN 端: 模块未定义 | | 21000 | WEB 端: 未找到父级平台 | | 21001 | WEB 端: 来自非法源的消息 | | 21002 | WEB 端: 来自非法域的消息 | | 21003 | WEB 端: 非法消息格式 | | 22000 | PC 端: Taf 回包格式不对 |