npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@hyext/ext-sdk-basic

v1.5.33

Published

基础小程序SDK

Downloads

1,201

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

添加事件监听