uni-app 检测到自定义基座有更新 正在删除旧版本(重新打了基座后 每次编译运行都会有)

发布于 1周前 作者 bupafengyu 来自 Uni-App

uni-app 检测到自定义基座有更新 正在删除旧版本(重新打了基座后 每次编译运行都会有)

产品分类

uniapp/App

开发环境、版本号、项目创建方式

项⽬目信息 详情
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 10
HBuilderX类型 正式
HBuilderX版本号 4.36
手机系统 Android
手机系统版本号 Android 10
手机厂商 华为
手机机型 平板
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

示例代码

16:20:33.574 检测到自定义基座有更新,正在删除旧版本...
16:20:35.054 删除旧版自定义基座成功

操作步骤

打了个新的基座后,每次点击“重新运行”按钮,都会出现删除旧版的自定义基座;

预期结果

重新打包自定义基座后可以运行一次,之后我点击“重新运行”按钮,就不要执行删除自定义基座,会导致我的Storage 数据也被删除。

实际结果

执行了删除自定义基座,导致我的Storage 数据也被清空了。

bug描述

16:20:33.574 检测到自定义基座有更新,正在删除旧版本… 16:20:35.054 删除旧版自定义基座成功

我本地储存了 Storage 数据,自动打包了新的自定义基座后就是这个; 每次点击“重新运行”按钮,自动删除了旧版的自定义基座,就会导致我储存的Storage 也被删除了;


1 回复

在开发使用uni-app进行跨平台应用开发时,如果遇到“检测到自定义基座有更新 正在删除旧版本”的提示,这通常意味着你正在使用的自定义基座(即开发环境中的应用容器)有更新,系统需要删除旧版本以安装新版本。这种情况在每次重新打包基座并编译运行时较为常见。为了优化这一过程,确保每次编译运行都能顺利进行,可以考虑以下代码案例和配置优化方法。

1. 确保基座版本与项目配置一致

首先,确保你的uni-app项目配置文件(如manifest.json)中的基座配置与当前使用的基座版本一致。这包括SDK版本、平台配置等。

{
  "mp-weixin": { // 以微信小程序为例
    "appid": "your-app-id",
    "setting": {
      "urlCheck": false
    },
    "usingComponents": true
  },
  // 其他平台配置...
  "sdkConfigs": {
    "uni-app": {
      "nativeBase": true, // 是否使用原生基座
      "custom": { // 自定义基座配置
        "version": "1.0.0", // 基座版本号
        "path": "/path/to/custom/base" // 基座路径
      }
    }
  }
}

2. 自动化构建脚本

为了简化每次编译前更新基座的过程,可以编写自动化脚本。以下是一个简单的Node.js脚本示例,用于检查并更新基座,然后触发uni-app的编译过程。

const { exec } = require('child_process');
const fs = require('fs');
const path = require('path');

// 检查基座版本并更新(这里假设有一个函数可以获取最新版本信息)
function checkAndUpdateBase() {
  // 模拟获取最新版本信息
  const latestVersion = '1.0.1';
  const currentVersion = JSON.parse(fs.readFileSync(path.join(__dirname, 'manifest.json'))).sdkConfigs['uni-app'].custom.version;

  if (currentVersion !== latestVersion) {
    console.log('Updating base...');
    // 这里添加更新基座的逻辑,比如从远程服务器下载新版本
    // ...

    // 更新manifest.json中的版本号
    const manifest = JSON.parse(fs.readFileSync(path.join(__dirname, 'manifest.json')));
    manifest.sdkConfigs['uni-app'].custom.version = latestVersion;
    fs.writeFileSync(path.join(__dirname, 'manifest.json'), JSON.stringify(manifest, null, 2));
  } else {
    console.log('Base is up to date.');
  }
}

// 执行编译命令
function compileApp() {
  exec('npm run dev', (error, stdout, stderr) => {
    if (error) {
      console.error(`exec error: ${error}`);
      return;
    }
    console.log(`stdout: ${stdout}`);
    console.error(`stderr: ${stderr}`);
  });
}

checkAndUpdateBase();
compileApp();

3. 清理旧版本

在更新基座后,可以手动或在脚本中添加清理旧版本的逻辑,确保不会残留无用的文件占用空间。

通过上述配置和脚本,可以优化自定义基座更新流程,减少每次编译运行时的重复操作,提高开发效率。

回到顶部