uniapp 热更新打包以及本地测试

69 阅读1分钟

热更新是App开发者常用的更新方式,指用户安装应用后打开时触发的即时更新,通过动态下发代码绕过审核机制实现快速修复BUG或发布功能。

image.png

wgt打包

1、修改版本号:

image.png

2、打包wgt

热更新文件打包流程:选择制作应用wgt包 -> 选择安卓/IOS

image.png image.png

3、打包成功标志

image.png

搭建本地测试服务(注意:需要在局域网内,即手机、电脑连同一wifi)

1、新建文件夹

新建一个任意名字的文件夹,这里起名为serve,并把打包的文件重命名放进刚刚命名的文件夹

image.png

1、使用node搭建本地服务

在当前文件夹下打开CMD并使用使用命令:npx http-server -p 9527 -c-1

image.png

这样起了一个本地的服务,就可以进行本地测试了。

静默更新

即不提醒用户重新安装APP的方案:

在App.vue中onLaunch生命周期中写入

let wgtPath = uni.getStorageSync('silent_wgt_path') || ''
    if (!wgtPath) {
        uni.downloadFile({
            url: 'http://192.168.31.80:9527/102.wgt',
            success: (res) => {
                let path = res.tempFilePath
                // 只记录路径,**不 install**
                uni.setStorageSync('silent_wgt_path', path);
                console.log('[Mock] 已标记,请杀进程再进');
            }
         })
    } else {
        plus.runtime.install(wgtPath, {force: false}, () => {
        console.log('[Silent] 安装成功,准备重启')
        uni.clearStorageSync()
        plus.runtime.restart() // 立即重启,用户无感知
    }, e => {
        console.error('[Silent] 安装失败', e)
        uni.clearStorageSync()
    })
}

这种写法将会正在用户杀死APP进程后下一次打开时自动静默更新成最新的包。

强制提醒用户更新

uni.downloadFile({
    url: "http://192.168.31.80:9527/102.wgt",
    success: (res) => {
    let path = res.tempFilePath;
    // 只记录路径,**不 install**
    uni.showModal({
       title: "发现新版本",
       content: "优化体验,建议立即升级",
       confirmText: "立即安装",
       cancelText: "以后再说",
       success: (res) => {
         if (res.confirm) {
            plus.runtime.install(
              res.tempFilePath,
              {
                force: false,
              },
               () => {
                plus.runtime.restart();
              },
              (e) => {
                uni.showToast({
                  title: "安装失败:" + e.message,
                  icon: "none",
                });
             }
          );
        }
      },
    });
  },
});