@hyext/ext-sdk-basic

1.5.21 • Public • Published

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
    1. 平台注入到核心中;
    2. API 通过核心调用平台;
  1. 接口 API:

    • 所有 API modules
    • 基础 API baseModules
  2. 核心 core:

    • 回溯逻辑 upon
    • 平台注入 inject
  3. 平台 platform:

    • 适配器 adapter: 抽象与外层平台的通信,以及一些基础事件;
    • 平台封装 common: 事件监听、平台可公用逻辑;
    • 特有模块 modules: 业务代码及特殊处理逻辑;
  4. 可公用:

    • 处理器 manager
    • 工具库 util
  5. 可扩展:

    • 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 回包格式不对

添加事件监听

Readme

Keywords

none

Package Sidebar

Install

npm i @hyext/ext-sdk-basic

Weekly Downloads

157

Version

1.5.21

License

ISC

Unpacked Size

232 kB

Total Files

152

Last publish

Collaborators

  • hy-ext
  • wundereye
  • maizhiying
  • xiangwang123
  • zhangjiaheng
  • limingyi_100