Skip to content

1. 开始

重构了分享模块,介绍下。

2. 当前痛点

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

当前 pmd 体积:

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

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

jsapi 就有 58.34KB

3. 优化思路

  1. 去掉 jsapi
  2. 补充类型提示
  3. 封装异步加载逻辑,业务不关心

其他:

  1. ToastDialog 改为外部传入,方便切换组件库
    • Toast.show => showToast
    • Dialog.confirm => showConfirmDialog
  2. toastdialog 文案支持自定义
  3. postGetMiniProgramOpenLink 改为外部传入,可以充分自定义。传入的时候,就应该封装好参数,share 内部不关心。另外,这里真的需要这么做吗,很多业务已经改成明文 scheme 了,根本不用传了
  4. configWx 改为外部传入,适应任意业务
  5. 支持隐藏任意分享渠道,传入 hideShareType 参数即可,并把之前内部的账号判断移出 share 核心逻辑
  6. getEnvVersion 去掉,没找到需要它的地方
  7. isTestEnv,同样去掉

4. 成果

减少 85KB

之前:

之后:

5. share-light

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