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

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

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

使用的核心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自定义编译任务如何引用三方库
568浏览 • 1回复 待解决
hvigor自定义任务中使用npm包
278浏览 • 1回复 待解决
如何在hvigor自定义任务中使用npm包
376浏览 • 1回复 待解决
编译构建怎么编写自定义任务
236浏览 • 1回复 待解决
hvigor自定义扩展demo
306浏览 • 1回复 待解决
如何定制构建多目标产物
399浏览 • 2回复 待解决
多module场景Hvigor自定义扩展咨询
286浏览 • 1回复 待解决
自定义构建任务写入文件
332浏览 • 1回复 待解决
自定义弹窗自定义转场动画
387浏览 • 1回复 待解决
使用自定义任务读取build-profile.josn5
441浏览 • 1回复 待解决
是否支持自定义装饰器
673浏览 • 1回复 待解决
如何自定义组件原型菜单
404浏览 • 1回复 待解决
ArkTs如何自定义容器组件?
1547浏览 • 1回复 待解决
如何自定义模拟Tabs组件
371浏览 • 1回复 待解决
Code Linter自定义代码规范
466浏览 • 1回复 待解决
自定义弹窗使用相关问题
362浏览 • 1回复 待解决
自定义弹窗如何嵌套使用
433浏览 • 1回复 待解决
自定义组件嵌套子组件
7851浏览 • 3回复 待解决