uni-app支付宝分包预加载配置不生效问题

4 篇文章 0 订阅
1 篇文章 0 订阅

前言

这是很早之前碰到的问题,刚开始使用uniapp开发打包到支付宝平台的时候遇到的,最近在整理优化代码的时候想起来,为了避免以后忘记,特此记录一下,同时希望也可以帮到遇到同样问题的小伙伴

发现问题

为了提高小程序启动速度,我们在项目中使用了大量的分包,主包只放置了一小部分页面。但是分包也会有一些弊端,这里就不再过描述了,感兴趣的自行去官网查验,大概就是分包是在访问页面时才会去下载内容,所以会有一些卡顿,分包预加载就是为了解决这个问题而出现的。

我们在某些即将要打开分包的页面中配置的分包预加载,但是在支付宝小程序的实际体验中,发现还是会出现卡顿延长的现象,仿佛没有配置预加载一样,后面通过去看打包后的源码发现,配置中并没有预加载这一项,打包后不生效。

//page.json 已经配置了preloadRule
...其他配置
"preloadRule": {
		"pages/index/index": {
			"network": "all",
			"packages": [
				"pages/dispatch/",
				"pages/priceCheck/",
				"pages/prizedraw/",
				"pages/mynulist/",
				"pages/disextend"
			]
		},
}
...
//unpackage\dist\build\mp-alipay\app.json
//并没有preloadRule这一对象,说明打包不生效
{
    "pages":"pages/index/index"
    ...其他配置
}

解决问题

那段时间刚好在自学node,所以刚好这个问题可以拿来练手,也非常简单,既然打包不生效,那我就在打包结束后手动把配置写进去不就好了,所以思路很简单:

  • 获取page.json的preloadRule

  • 获取unpackage/build/mp-alipay/app.json的内容,判断是否有preloadRule

  • 如果没有,则把步骤一中获取的内容写进app.json中去

很简单吧,其中只会用到node中的pathfs模块,然后照着webpack官网中plugin的教程写一个插件,监听done生命周期并触发就可以

看一下代码就能明白

// vue.config.js
function AlipayPreloadRulePlugin() {}

AlipayPreloadRulePlugin.prototype.apply = function(compiler) {
  compiler.plugin('done', function() {
    readFile(path.join(__dirname, 'pages.json')).then(data => {
      const pageData = JSON.parse(data.toString().replace(/\/*.*?\*\//g, ''))
      if (pageData.preloadRule) {
        const appConfigPath = path.join(__dirname, 'unpackage/dist/', process.env.NODE_ENV === 'production' ? 'build' : 'dev', platform, 'app.json')
        readFile(appConfigPath).then(config => {
          config = JSON.parse(config.toString().replace(/\/*.*?\*\//g, ''))
          if (!config.preloadRule) {
            config.preloadRule = pageData.preloadRule
            writeFile(appConfigPath, JSON.stringify(config, null, 2)).then(() => {
              console.info('支付宝预加载配置创建成功了')
            })
          }
        })
      }
    }).catch((err) => {
      console.error('支付宝生成分包预加载配置出错了:', err.toString())
    })
  })
}


总结

简单来说就是**获取配置 -> 写入配置 **

完事~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值