说明
SDK随着功能的持续迭代,包文件有可能变多,但整个目录结构、核心文件基本上不会变化。
包文件示意图 | 包文件说明 |
|---|---|
根目录 |
|
根目录/esm/plugin |
(其他一些插件,历史遗留,业务一般不涉及“亲自”使用它们,可以不做了解。) |
index.js是一个最终bundle文件,包含SDK功能的所有代码,本身不依赖任何其他文件了。包里面的其他文件,是为了各种使用场景所提供的“细化”文件,比如各个的不同平台的入口文件、比如各个插件文件,是为了能满足不同场景需求的“定制化”使用方式,index.js不依赖它们。index.umd.js同index.js一致,只不过文件的模块类型有区别,index.js是esm模块类型,index.umd.js是umd模块类型。
SDK导出了一个默认实例,该实例包含“几乎”所有SDK功能,包含大部分插件。在不同的地方导入时,一般都是同一个实例,除非在不同的分包中多次导入。
import $$sdk from '@datarangers/sdk-mp';
$$sdk就是SDK导出的默认实例。
esm/sdk.js导出的是SDK的“类”,包含“几乎”所有SDK功能,包含大部分插件,默认实例就是使用它实例化出来的,就是new了一下。
import SDK from '@datarangers/sdk-mp/esm/sdk'; const $$sdk = new SDK(); // 跟这个默认实例相等 // import $$sdk from '@datarangers/sdk-mp';
esm/base.js导出的也是SDK的“类”,但只包重要基础SDK功能,只包含核心插件。esm/sdk.js本质上就是“继承”esm/base.js,并尽量包含大部分插件。
虽然是base“类”,但init、config、send、event等api跟sdk“类”没有任何区别。
import BaseSDK from '@datarangers/sdk-mp/esm/base'; const $$baseSdk = new BaseSDK(); $$baseSdk.init({ app_id: 0000, log: true, }); $$baseSdk.send(); $$baseSdk.event('test', {});
如果需要某个插件的能力,可以自定义导出该插件并进行注册。比如auto插件(采集预置事件):
import BaseSDK from '@datarangers/sdk-mp/esm/base'; //导入auto插件并注册 import Auto from '@datarangers/sdk-mp/esm/plugin/auto'; BaseSDK.usePlugin(Auto); const $$baseSdk = new BaseSDK(); $$baseSdk.init({ app_id: 0000, log: true, // 开启auto功能 auto_report: true, }); $$baseSdk.send(); $$baseSdk.event('test', {});
比如verify插件(进行埋点实时验证):
import BaseSDK from '@datarangers/sdk-mp/esm/base'; //导入verify插件并注册 import Verify from '@datarangers/sdk-mp/esm/plugin/verify'; BaseSDK.usePlugin(Verify); const $$baseSdk = new BaseSDK(); $$baseSdk.init({ app_id: 0000, log: true, // ... }); $$baseSdk.send(); $$baseSdk.event('test', {});
如果觉得SDK的包体积比较大,需要考虑以下方式:
index.js被打包到最终的小程序应用包中(在小程序开发者工具中需要勾选“上传时过滤无依赖文件”,该勾选项的位置:小程序开发者工具->详情->本地设置中)。esm/base.js的说明。