HarmonyOS hvigor自定义插件不写在同级目录就无法正常运行

我直接在hvigorfile.ts中引用Plugin目录里面的插件,hvigor.nodesEvaluated中的console不执行。

目录结构是这样的:

-Project

–Entry

—hvigorfile.ts

–Plugin

—src

----CustomePlugin.ts

hvigorfile.ts

import { hspTasks } from '@ohos/hvigor-ohos-plugin';
import { CustomePlugin } from '../../Plugin/src/CustomePlugin';
export default {
  system: hspTasks,  /* Built-in plugin of Hvigor. It cannot be modified. */
  plugins:[CustomePlugin()]          /* Custom plugin to extend the functionality of Hvigor. */
}

CustomerPlugin中console.log(‘nodesEvaluated’)就执行不到,但是如果把CustomerPlugin.ts放在与Entry/hvigorfile.ts同级目录引用就能执行,或者把hvigor从hvigorfile.ts传到CumstomePlugin(hvigor)中就能执行,是不是就应该这样或者是我的使用方式不对?

CustomerPlugin.ts

import { hvigor, HvigorNode, HvigorPlugin } from '@ohos/hvigor';
import { OhosHapContext, OhosPluginId, Target } from '@ohos/hvigor-ohos-plugin';

export function CustomPlugin(): HvigorPlugin {
  return {
    pluginId: 'NlRouterAppPlugin',
    apply: async (node: HvigorNode) => {
      console.log('hello NlRouterAppPlugin!');
      hvigor.nodesEvaluated(() => {
        console.log('nodesEvaluated');
        hapTask(node);
      })
    }
  }
}

function hapTask(currentNode: HvigorNode) {
  // 等待全部节点加载完成之后获取子节点信息
  console.log('hapTask:');
  hvigor.getRootNode().subNodes((node: HvigorNode) => {

    // 获取hap模块上下文信息
    const hapContext = node.getContext(OhosPluginId.OHOS_HAP_PLUGIN) as OhosHapContext;
    const moduleName = hapContext?.getModuleName();
    console.log('subNodes:', hapContext?.getOhpmDependencyInfo());
    hapContext?.targets((target: Target) => {
      const targetName = target.getTargetName();
      console.log('targetName:',targetName);
      const outputPath = target.getBuildTargetOutputPath();
      // 禁用任务
      node.getTaskByName(`${target.getTargetName()}@SignHap`)?.setEnable(false);
      node.registerTask({
        // 任务名称
        name: `${targetName}@onlineSignHap`,
        // 任务执行逻辑主体函数
        run() {
          console.log('module Task');
        },
        // 配置前置任务依赖
        dependencies: [`${targetName}@PackageHap`],
        // 配置任务的后置任务依赖
        postDependencies: ['assembleHap']
      });
    });
  });
}

有没有类似ASM 代码插桩的api,如果没有我看有的demo用的typescript库做的代码插桩,官方是否建议这么做。

HarmonyOS
3天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

建议在hvigorfile.ts中定义插件方法,实现HvigorPlugin接口。

参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-hvigor-plugin-0000001778674577-V5#section552855418188

关于代码插桩,目前ArkTS只提供了AOP功能,可以参考文档:

https://developer.huawei.com/consumer/cn/doc/best-practices-V5/bpta-application-aspect-programming-design-V5#section7148435113516

分享
微博
QQ
微信
回复
3天前
相关问题
自定义hvigor插件问题?
217浏览 • 0回复 待解决
自定义hvigor插件问题
124浏览 • 1回复 待解决
hvigor自定义扩展demo
1043浏览 • 1回复 待解决
自定义hvigor任务,定制编译产物
1160浏览 • 1回复 待解决
多module场景Hvigor自定义扩展咨询
837浏览 • 1回复 待解决
hvigor自定义任务中使用npm包
751浏览 • 1回复 待解决
如何在hvigor自定义任务中使用npm包
971浏览 • 1回复 待解决
Hvigor自定义编译任务如何引用三方库
1257浏览 • 1回复 待解决
HarmonyOS Slider无法自定义滑轨样式
30浏览 • 1回复 待解决
HarmonyOS 全局自定义弹窗无法弹出
47浏览 • 1回复 待解决