自定义hvigor任务,定制编译产物

通过自定义hvigor任务,实现编译构建阶段,自动修改har产物的名字,比如拼接version或者其他信息。

HarmonyOS
2024-05-28 22:07:51
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
幸运小面

使用的核心API

开发hvigor任务

hvigor API

核心代码解释

这里展示在har module的hvigorfile.ts文件下,编写脚本代码,实现:

1.获取并解析oh-package.json5中的内容。

2.获取har产物的路径。

3.修改har产物的名称。

import { harTasks } from '@ohos/hvigor-ohos-plugin'; 
import fs from 'fs' 
  
interface OhPackage { 
    name: string; 
    version: number; 
    description: string; 
    author: string; 
} 
  
export function renameHarTask(str?: string) { 
    return { 
        pluginId: 'RenameHarTaskID', 
        apply(pluginContext) { 
            pluginContext.registerTask({ 
                // 编写自定义任务 
                name: 'renameHarTask', 
                run: (taskContext) => { 
                    //读取oh-package.json5,解析出version 
                    const packageFile = taskContext.modulePath+'\\oh-package.json5'; 
                    console.log('file: ', packageFile); 
                    let fileContent = fs.readFileSync(packageFile, 'utf8'); 
                    console.log(fileContent); 
                    const content: OhPackage = JSON.parse(fileContent); 
                    const version = content.version; 
                    const author = content.author; 
                    console.log('renameHarTask: ', taskContext.moduleName, taskContext.modulePath); 
                    const sourceFile = taskContext.modulePath + '\\build\\default\\outputs\\default\\' + taskContext.moduleName + '.har'; 
                    const targetFile = taskContext.modulePath + '\\build\\default\\outputs\\default\\' 
                        + taskContext.moduleName + '-' + version + '-' + author +'.har'; 
                    console.log('renameHarTask: sourceFile: ', sourceFile); 
                    console.log('renameHarTask: targetFile: ', targetFile); 
                    // 修改产物名 
                    fs.rename(sourceFile, targetFile, (err)=> { 
                        console.log('err: ' + err); 
                    }); 
                }, 
                // 确认自定义任务插入位置 
                dependencies: ['default@PackageHar'], 
                postDependencies: ['assembleHar'] 
            }) 
        } 
    } 
} 
  
export default { 
    system: harTasks, 
    plugins:[renameHarTask()] 
}

实现效果

在Terminal窗口执行: ./hvigorw renameHarTask。

查看build/default/outputs/default/下的har。

可以看到,生成的har已经修改为了我们代码中指定的taskContext.moduleName    + '-' + version + '-' + author +'.har'。

分享
微博
QQ
微信
回复
2024-05-29 23:24:28
相关问题
Hvigor自定义编译任务如何引用三方库
1090浏览 • 1回复 待解决
hvigor自定义任务中使用npm包
613浏览 • 1回复 待解决
如何在hvigor自定义任务中使用npm包
837浏览 • 1回复 待解决
编译构建怎么编写自定义任务
516浏览 • 1回复 待解决
hvigor自定义扩展demo
889浏览 • 1回复 待解决
如何定制构建多目标产物
715浏览 • 2回复 待解决
自定义构建任务写入文件
701浏览 • 1回复 待解决
多module场景Hvigor自定义扩展咨询
673浏览 • 1回复 待解决
使用自定义任务读取build-profile.josn5
935浏览 • 1回复 待解决
自定义弹窗自定义转场动画
896浏览 • 1回复 待解决
如何对编译产物进行反编译
452浏览 • 1回复 待解决
如何减小编译产物so大小
344浏览 • 1回复 待解决
HarmonyOS 自定义键盘
150浏览 • 1回复 待解决
CustomDialog自定义动画
310浏览 • 1回复 待解决
HarmonyOS 使用自定义字体
114浏览 • 1回复 待解决