1. 开始
重构了分享模块,介绍下。
2. 当前痛点
- 引入了
jsapi
,体积太大,文件太多,可读性、可维护性太差。本来就是非常简单的东西,加载sdk
、调用全局变量即可,现在变得非常麻烦 - 类型缺失,使用、阅读、开发、调试困难
- 多个全局对象
shareObject
、shareUiObject
没有类型 - 分享类别
shareType
没有类型,都是1234
的魔法字符串 - 对外的API,比如
initShare
没有类型
- 多个全局对象
- 最关键的一点,分享根本不是首屏所需资源,不是必要路径,完全可以异步加载
当前 pmd
体积:

把分享重定向到一个伪文件,即去掉分享后的 pmd
体积:

可见分享模块的体积已经达到了 97.49KB
,亟需优化。
光 jsapi
就有 58.34KB
。

3. 优化思路
- 去掉
jsapi
- 补充类型提示
- 封装异步加载逻辑,业务不关心
其他:
Toast
,Dialog
改为外部传入,方便切换组件库Toast.show
=>showToast
Dialog.confirm
=>showConfirmDialog
toast
和dialog
文案支持自定义postGetMiniProgramOpenLink
改为外部传入,可以充分自定义。传入的时候,就应该封装好参数,share
内部不关心。另外,这里真的需要这么做吗,很多业务已经改成明文scheme
了,根本不用传了configWx
改为外部传入,适应任意业务- 支持隐藏任意分享渠道,传入
hideShareType
参数即可,并把之前内部的账号判断移出share
核心逻辑 getEnvVersion
去掉,没找到需要它的地方isTestEnv
,同样去掉
4. 成果
减少 85KB
。
之前:

之后:

5. share-light
share-light
代码在 plugin-light 中,点此查看文档。