You need to enable JavaScript to run this app.
导航
参考:SDK包文件结构说明
最近更新时间:2025.05.20 14:24:28首次发布时间:2025.05.20 14:24:28
我的收藏
有用
有用
无用
无用

文件列表

说明

SDK随着功能的持续迭代,包文件有可能变多,但整个目录结构、核心文件基本上不会变化。

包文件示意图

包文件说明

根目录
Image

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
Image

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类型文件

(其他一些插件,历史遗留,业务一般不涉及“亲自”使用它们,可以不做了解。)

进一步说明

  1. index.js是一个最终bundle文件,包含SDK功能的所有代码,本身不依赖任何其他文件了。包里面的其他文件,是为了各种使用场景所提供的“细化”文件,比如各个的不同平台的入口文件、比如各个插件文件,是为了能满足不同场景需求的“定制化”使用方式,index.js不依赖它们。index.umd.jsindex.js一致,只不过文件的模块类型有区别,index.js是esm模块类型,index.umd.js是umd模块类型。

  2. SDK导出了一个默认实例,该实例包含“几乎”所有SDK功能,包含大部分插件。在不同的地方导入时,一般都是同一个实例,除非在不同的分包中多次导入。

    import $$sdk from '@datarangers/sdk-mp';
    

    $$sdk就是SDK导出的默认实例。

  3. esm/sdk.js导出的是SDK的“类”,包含“几乎”所有SDK功能,包含大部分插件,默认实例就是使用它实例化出来的,就是new了一下。

    import SDK from '@datarangers/sdk-mp/esm/sdk';
    const $$sdk = new SDK();  
    
    // 跟这个默认实例相等
    // import $$sdk from '@datarangers/sdk-mp';
    
  4. esm/base.js导出的也是SDK的“类”,但只包重要基础SDK功能,只包含核心插件。esm/sdk.js本质上就是“继承”esm/base.js,并尽量包含大部分插件。
    虽然是base“类”,但initconfigsendevent等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', {});
    
  5. 如果觉得SDK的包体积比较大,需要考虑以下方式:

    • 使用默认导入SDK的方式时,理论上只有index.js被打包到最终的小程序应用包中(在小程序开发者工具中需要勾选“上传时过滤无依赖文件”,该勾选项的位置:小程序开发者工具->详情->本地设置中)。
    • 如果觉的小程序的主包体积已经比较大了,可以考虑将SDK放到小程序分包中使用,具体在分包中怎么使用,请参考本文档的“各种场景下功能使用”中的“在小程序分包中使用”内容。
    • 如果想进一步减少体积,可以参考上面第4段关于esm/base.js的说明。