uni-app发布时动态修改manifest.json有延迟

uni-app发布时动态修改manifest.json有延迟

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

示例代码:

// 发布时动态修改 manifest.json
const manifestPath = path.resolve(__dirname, './manifest.json')
let Manifest = fs.readFileSync(manifestPath, {
encoding: 'utf-8'
});  

function replaceManifest(path, value) {
const arr = path.split('.');
const len = arr.length;
const lastItem = arr[len - 1];  

let i = 0;  
let ManifestArr = Manifest.split(/\n/);  

for (let index = 0; index < ManifestArr.length; index++) {  
    const item = ManifestArr[index];  
    if (new RegExp(`"${arr[i]}"`).test(item)) ++i;  
    if (i === len) {  
        const hasComma = /,/.test(item);  
        ManifestArr[index] = item.replace(  
            new RegExp(`"${lastItem}"[\\s\\S]*:[\\s\\S]*`),  
            `"${lastItem}": ${value}${hasComma ? ',' : ''}`  
        );  
        break;  
    }  
}  

Manifest = ManifestArr.join('\n');  
}

// 使用  "/qyppzs_gzh/wx/"
replaceManifest('h5.router.base', "\"/qyppzs_gzh/jtm9\"");
fs.writeFileSync(manifestPath, Manifest, {
flag: 'w',
});
1 回复

uni-app 中,manifest.json 文件是项目的配置文件,通常用于设置应用的基本信息、权限、启动页等。在发布时,如果需要动态修改 manifest.json 文件,可能会遇到延迟问题。以下是一些可能的原因和解决方案:


可能的原因

  1. 编译缓存uni-app 在编译时会缓存 manifest.json 文件的内容。如果动态修改后没有清除缓存,可能会导致修改未生效。

  2. 编译顺序: 如果动态修改 manifest.json 的操作发生在编译过程中或编译之后,可能会导致修改未被正确应用到最终的打包文件中。

  3. HBuilderX 工具问题: 如果你使用的是 HBuilderX 工具,可能存在工具本身的缓存或延迟问题。

  4. 文件读写延迟: 如果动态修改 manifest.json 是通过脚本或程序实现的,可能会因为文件读写操作的延迟导致修改未及时生效。


解决方案

1. 清除缓存

在修改 manifest.json 后,手动清除 uni-app 的编译缓存:

  • 删除 unpackage 文件夹(uni-app 的编译输出目录)。
  • 在 HBuilderX 中,点击菜单栏的 运行 -> 清除缓存并重新运行

2. 确保修改在编译前完成

确保动态修改 manifest.json 的操作在编译开始之前完成。可以通过以下方式实现:

  • 在自定义脚本中,先修改 manifest.json,再触发编译命令。
  • 使用 npm scriptsshell 脚本,确保修改和编译的顺序正确。

3. 使用 HBuilderX 插件

如果你使用的是 HBuilderX,可以尝试编写插件来动态修改 manifest.json,并确保插件在编译前执行。

4. 手动修改并重新编译

如果动态修改的延迟问题无法解决,可以尝试手动修改 manifest.json 文件,并重新编译项目。

5. 使用环境变量

如果需要根据不同的环境动态配置 manifest.json,可以使用环境变量来控制。例如:

  • manifest.json 中引用环境变量。
  • 在编译时通过命令行传递环境变量。

6. 检查文件读写操作

如果动态修改是通过脚本实现的,确保文件读写操作的同步性。例如,使用 fs.writeFileSync 而不是 fs.writeFile


示例:通过脚本动态修改 manifest.json

以下是一个通过 Node.js 脚本动态修改 manifest.json 的示例:

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

// 读取 manifest.json
const manifestPath = path.resolve(__dirname, 'src/manifest.json');
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));

// 动态修改配置
manifest.name = 'MyApp';
manifest.version = '1.0.0';

// 写回 manifest.json
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));

console.log('manifest.json 已更新');
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!