说明
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-qg';
$$sdk
就是SDK导出的默认实例。
esm/sdk.js
导出的是SDK的“类”,包含“几乎”所有SDK功能,包含大部分插件,默认实例就是使用它实例化出来的,就是new了一下。
import SDK from '@datarangers/sdk-qg/esm/sdk'; const $$sdk = new SDK(); // 跟这个默认实例相等 // import $$sdk from '@datarangers/sdk-qg';
esm/base.js
导出的也是SDK的“类”,但只包重要基础SDK功能,只包含核心插件。esm/sdk.js
本质上就是“继承”esm/base.js
,并尽量包含大部分插件。
虽然是base“类”,但init
、config
、send
、event
等api跟sdk“类”没有任何区别。
import BaseSDK from '@datarangers/sdk-qg/esm/base'; const $$baseSdk = new BaseSDK(); $$baseSdk.init({ app_id: 0000, log: true, }); $$baseSdk.send(); $$baseSdk.event('test', {});
如果需要某个插件的能力,可以自定义导出该插件并进行注册。比如ab插件:
import BaseSDK from '@datarangers/sdk-qg/esm/base'; //导入ab插件并注册 import AB from '@datarangers/sdk-qg/esm/plugin/ab'; BaseSDK.usePlugin(AB); const $$baseSdk = new BaseSDK(); $$baseSdk.init({ app_id: 0000, log: true, // 开启ab功能 enable_ab_test: true, }); $$baseSdk.send(); $$baseSdk.event('test', {});
如果觉得SDK的包体积比较大,需要考虑以下方式:
index.js
被打包到最终的小游戏应用包中。esm/base.js
的说明。