uni-app 紧急求助 强烈建议原生插件可以选择版本打包

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

uni-app 紧急求助 强烈建议原生插件可以选择版本打包

问题描述

如题,目前打包会强行使用原生插件的最新版,可是原生插件是个人用户作者维护难免会出错,更新了新版反倒出现了老版本没有的问题,我现在就碰到了这问题,打包后在比较新的系统上运行会出现闪退的问题没法正常使用,之前在插件作者还没更新打包的时候就没这问题,这严重影响了使用体验,导致软件无法正常更新。建议选择插件时可自主选择插件历史版本

3 回复

这种类型的插件的规范已经淘汰了,请改用UTS插件,可以自由锁版


建议联系作者 发一个老版本的新插件

在uni-app中,原生插件的版本管理确实是一个重要的问题,尤其是在需要紧急打包不同版本的插件时。虽然uni-app本身没有直接提供通过命令行选择原生插件版本的内置功能,但我们可以通过一些脚本和配置文件来实现这一需求。

以下是一个基于Node.js脚本和uni-app项目结构的示例,展示如何根据需求选择不同的原生插件版本进行打包。

1. 项目结构

假设你的uni-app项目结构如下:

my-uni-app/
├── manifest.json
├── pages/
│   └── ...
├── static/
│   └── ...
├── native-plugins/
│   ├── plugin-a/
│   │   ├── 1.0.0/
│   │   ├── 1.0.1/
│   │   └── ...
│   └── plugin-b/
│       ├── 2.0.0/
│       ├── 2.0.1/
│       └── ...
├── scripts/
│   └── build-with-plugin-version.js
└── ...

2. Node.js脚本

scripts/build-with-plugin-version.js中,编写以下脚本:

const fs = require('fs');
const path = require('path');

const PLUGIN_DIR = path.join(__dirname, '../native-plugins');
const TARGET_VERSION = process.argv[2] || 'latest'; // 从命令行获取目标版本,默认为'latest'

function copyPluginVersion(pluginName, version) {
    const pluginPath = path.join(PLUGIN_DIR, pluginName, version);
    const targetPath = path.join(__dirname, '../native-plugins-temp', pluginName);

    if (!fs.existsSync(pluginPath)) {
        console.error(`Plugin version ${version} not found for ${pluginName}`);
        process.exit(1);
    }

    // 清空目标目录
    if (fs.existsSync(targetPath)) {
        fs.readdirSync(targetPath).forEach(file => {
            fs.unlinkSync(path.join(targetPath, file));
        });
        fs.rmdirSync(targetPath);
    }

    // 复制指定版本的插件到临时目录
    fs.mkdirSync(targetPath, { recursive: true });
    fs.copyFileSync(pluginPath, targetPath); // 注意:这里需要递归复制目录
}

// 示例:复制plugin-a的1.0.1版本和plugin-b的2.0.0版本
copyPluginVersion('plugin-a', TARGET_VERSION === 'latest' ? '1.0.1' : TARGET_VERSION);
copyPluginVersion('plugin-b', TARGET_VERSION === 'latest' ? '2.0.0' : TARGET_VERSION);

console.log(`Copied plugins with version ${TARGET_VERSION}`);

3. 使用脚本

在命令行中运行以下命令来打包带有特定版本插件的uni-app项目:

node scripts/build-with-plugin-version.js 1.0.1  # 打包plugin-a的1.0.1版本和plugin-b的默认版本(如果脚本中设置为latest)
node scripts/build-with-plugin-version.js latest # 打包plugin-a和plugin-b的默认版本

请注意,上述脚本中的fs.copyFileSync(pluginPath, targetPath);需要替换为递归复制目录的函数,因为插件通常是一个目录而不是单个文件。你可以使用fs-extra等库来简化目录的复制操作。

回到顶部