前端打包 app 即把写好的静态资源文件套壳打包成 app ,而热更新即下载并替换 app 内部的静态资源文件,实现 app 的版本升级。

  在uni-app 中,我们是如何实现热更新的呢?下面来看代码

// 检测升级
                // #ifdef APP-PLUS
                // var ver = plus.runtime.version;
                var aid = plus.runtime.appid;
                uni.request({
                    url: this.BaseUrl + '/api/update/version?version=' + this.localVersion + '&appid=' + aid + '&_t=' + new Date().getTime(),
                    method: 'GET',
                    success: result => {
                        var data = result.data;
                        if (data.update && data.wgtUrl) {
                            this.wgtUrl = data.wgtUrl;//保存下载地址
                                uni.showModal({
                                    title: "发现新版本",
                                    content: "确认下载更新",
                                    success: (res) => {
                                        if (res.confirm) {//当用户确定更新,执行更新
                                            this.doUpData();
                                        } else if (res.cancel) {
                                            // console.log('用户点击取消');
                                        }
                                    }
                                })
                        }
                    },
                    complete: () => {
                        that.total += 1;
                    }
                });
                // #endif
doUpData() {
                uni.showLoading({
                    title: '更新中……'
                })
                uni.downloadFile({//执行下载
                    url: this.wgtUrl,
                    success: downloadResult => {//下载成功
                        if (downloadResult.statusCode === 200) {
                            uni.showModal({
                                title: '',
                                content: '更新成功,确定现在重启吗?',
                                confirmText: '重启',
                                confirmColor: '#EE8F57',
                                success: function(res) {
                                    if (res.confirm) {
                                        plus.runtime.install(//安装
                                            downloadResult.tempFilePath, {
                                                force: true
                                            },
                                            function() {
                                                // utils.showToast('更新成功,重启中');
                                                plus.runtime.restart();
                                            },
                                            function(e) {
                                                // utils.showToast('更新失败');
                                            }
                                        );
                                    }
                                }
                            });
                        }
                    },
                    complete: () => {
                        uni.hideLoading();
                    }
                });
            }
12-30 08:44