文件列表
说明
SDK随着功能的持续迭代,包文件有可能变多,但整个目录结构、核心文件基本上不会变化。
包文件示意图 | 包文件说明 |
---|
根目录
 | package.json :包的配置信息。
README.md :SDK的基本介绍文件。
index.js :入口文件,es模块类型,提供导出默认实例,保持跟1.x版本一致。
index.d.ts :是index.js导出的默认实例的typescript类型文件。
index.umd.js :入口文件,umd模块类型,提供导出默认实例,保持跟1.x版本一致。
index.umd.d.ts :是index.umd.js导出的默认实例的typescript类型文件。
sdk.d.ts :SDK类的typescript类型文件,会被其他d.ts文件引入使用。
esm :表示其中的文件都是es模块类型的。
sdk.js :导出SDK类,默认使用了所有内置插件,本身尽量同时支持小程序多平台,即同时能在微信小程序平台、字节小程序平台、支付宝小程序平台等这些平台使用。base.js :导出SDK类,但只使用了部分核心插件,本身也是尽量同时支持小程序多平台,可以看做sdk.js的基础版本,移除了可选插件。wx.js :同base.js类似,导出SDK类的基础版本,但只支持微信小程序平台。tt.js :同base.js类似,导出SDK类的基础版本,但只支持字节小程序平台。my.js :同base.js类似,导出SDK类的基础版本,但只支持支付宝小程序平台。qq.js :同base.js类似,导出SDK类的基础版本,但只支持qq小程序平台。swan.js :同base.js类似,导出SDK类的基础版本,但只支持百度小程序平台。xhs.js :同base.js类似,导出SDK类的基础版本,但只支持小红书小程序平台。ks.js :同base.js类似,导出SDK类的基础版本,但只支持快手小程序平台。jd.js :同base.js类似,导出SDK类的基础版本,但只支持京东小程序平台。tb.js :同base.js类似,导出SDK类的基础版本,但只支持淘宝小程序平台。x.d.ts :同名js的typescript类型文件。plugin :插件目录,SDK默认提供的插件文件,以及相应的typescript类型文件。
umd :表示其中的文件都是umd模块类型的,除了模块类型不同,其他同esm一样。
|
根目录/esm/plugin
 | esm :插件目录,SDK默认提供的插件文件,以及相应的typescript类型文件。
ab.js :ab 实验功能插件,需要配合使用 enable_ab_test 参数开启,开启后 SDK 会在初始化完成后会向 ab 实验接口请求实验配置,业务可以使用 getVar 等 api 来进行实验曝光,SDK 会自动上报 abtest_exposure 特定事件,曝光的实验的 vid 在后续事件上报时也会带上去。默认导出实例已包含该插件。auto.js :预定义事件自动上报插件,需要配合使用 auto_report 参数开启,开启后 SDK 会监听小程序相关生命周期和获取相关信息,并自动上报对应的预定义事件。默认导出实例已包含该插件。compensate.js :缓存插件,使用该插件后,SDK 会自动针对因网络问题而上报失败的埋点进行缓存到storage并在下次SDK初始化后进行补充上报。默认导出实例已包含该插件。utm.js :广告/投放分析插件,启动时采集utm_source、utm_medium等相关参数。默认导出实例已包含该插件。robot.js :爬虫插件,判断是爬虫的场景下,就不会上报事件,目前仅针对微信小程序平台有效。encrypt.js :加密插件,目前只支持国密加密,并且依赖数据流服务的相应的版本支持。exposure.js :元素曝光插件,通过对元素配置相关参数自动采集元素曝光事件。x.d.ts :同名js的typescript类型文件
(其他一些插件,历史遗留,业务一般不涉及“亲自”使用它们,可以不做了解。) |
进一步说明
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', {});
如果觉得SDK的包体积比较大,需要考虑以下方式:
- 使用默认导入SDK的方式时,理论上只有
index.js
被打包到最终的小程序应用包中(在小程序开发者工具中需要勾选“上传时过滤无依赖文件”,该勾选项的位置:小程序开发者工具->详情->本地设置中)。 - 如果觉的小程序的主包体积已经比较大了,可以考虑将SDK放到小程序分包中使用,具体在分包中怎么使用,请参考本文档的“各种场景下功能使用”中的“在小程序分包中使用”内容。
- 如果想进一步减少体积,可以参考上面第4段关于
esm/base.js
的说明。