最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

鴻蒙開發(fā)Hvigor插件動態(tài)生成代碼的操作方法

 更新時間:2024年11月21日 08:59:51   作者:龍兒箏  
Hvigor主要提供了兩種方式來實現(xiàn)插件:基于hvigorfile腳本開發(fā)插件、基于typescript項目開發(fā),下面以基于hvigorfile腳本開發(fā)插件進行介紹,感興趣的朋友跟隨小編一起看看吧

Hvigor允許開發(fā)者實現(xiàn)自己的插件,開發(fā)者可以定義自己的構(gòu)建邏輯,并與他人共享。Hvigor主要提供了兩種方式來實現(xiàn)插件:基于hvigorfile腳本開發(fā)插件、基于typescript項目開發(fā)。下面以基于hvigorfile腳本開發(fā)插件進行介紹。

基于hvigorfile腳本開發(fā)

基于hvigorfile.ts腳本開發(fā)的方式,其優(yōu)點是可實現(xiàn)快速開發(fā),直接編輯工程或模塊下hvigorfile.ts即可編寫插件代碼,不足之處是在多個項目中,無法方便的進行插件代碼的復(fù)用和共享分發(fā)。

  • 導(dǎo)入模塊依賴。
// 導(dǎo)入接口
import { HvigorPlugin, HvigorNode } from '@ohos/hvigor'
  • 編寫插件代碼。
    在hvigorfile.ts中定義插件方法,實現(xiàn)HvigorPlugin接口。
// 實現(xiàn)自定義插件
function customPlugin(): HvigorPlugin {
    return {
        pluginId: 'customPlugin',
        apply(node: HvigorNode) {
            // 插件主體
            console.log('hello customPlugin!');
        }
    }
}
  • 在導(dǎo)出聲明中使用插件。
export default {
    system: appTasks,
    plugins:[
        customPlugin()  // 應(yīng)用自定義Plugin
    ]
}

使用hvigorfile插件動態(tài)生成navigation防混淆文件

我們在使用navigation的系統(tǒng)路由表時,每次添加新頁面,都需要配置一下release環(huán)境防混淆。若將這些頁面放在一個固定的目錄下,則與我們的模塊化設(shè)計相違背,若命名使用固定的前綴或后綴,總感覺有點多余,手動一個一個的添加,雖然符合我們的代碼規(guī)范設(shè)計,但就是有點繁瑣。有沒有更方便的方式來處理這個混淆配置呢?

其實我們可以在寫一個hvigorfilew插件來自動生成混淆配置文件。我們自定義一個HvigorPlugin任務(wù),通過OhosHapContext對象讀取module.json5文件中的routerMap字段,可以獲取系統(tǒng)路由表的名稱,再讀取profile目錄下的路由表。解析json文件內(nèi)存,并將頁面路徑寫到一個混淆文件中,這樣每次編譯時,自動生成防混淆文件,我們只需要引入這個文件就可以了。示例如下

import { hapTasks, OhosHapContext, OhosPluginId } from '@ohos/hvigor-ohos-plugin'
import { HvigorPlugin, HvigorNode, FileUtil } from '@ohos/hvigor'
function parseRouterMap(): HvigorPlugin {
  return {
    pluginId: 'parseRouterMap',
    apply(node: HvigorNode) {
      const hapCtx = node.getContext(OhosPluginId.OHOS_HAP_PLUGIN) as OhosHapContext
      const moduleJson = hapCtx.getModuleJsonOpt()
      const routerMapName = moduleJson['module']['routerMap'].split(':')[1]
      const dir = hapCtx.getModulePath()
      const srcFile = FileUtil.pathResolve(dir, 'src', 'main', 'resources', 'base', 'profile', `${routerMapName}.json`)
      const json = FileUtil.readJson5(srcFile)
      const routerRuleFile = FileUtil.pathResolve(dir, 'obfuscation-router.txt')
      FileUtil.ensureFileSync(routerRuleFile)
      const routerMapArray = json['routerMap']
      let rules = '-keep-file-name\n'
      for (const element of routerMapArray) {
        const pageSourceFile = element['pageSourceFile']
        const path = pageSourceFile.substring(0, pageSourceFile.lastIndexOf('.'))
        rules += `${path}\n`
      }
      FileUtil.writeFileSync(routerRuleFile, rules)
    }
  }
}
export default {
  system: hapTasks,
  plugins:[parseRouterMap()]
}

編譯后會在entry目錄下生成obfuscation-router.txt防混淆文件,只要引入這個文件就可以了。

使用hvigorfile插件動態(tài)生成navigation頁面枚舉名稱

我們在我們navigation的push跳轉(zhuǎn)到新頁面時,都得提前定義好系統(tǒng)路由表中的頁面name,因為使用的name與系統(tǒng)路由表中定義的name不相同時,跳轉(zhuǎn)頁面則會白屏。有了前面的經(jīng)驗,其它我們也可以動態(tài)生成一個ets文件,將系統(tǒng)路由表中的頁面名稱自動生成一個枚舉,這樣就不用每次配置系統(tǒng)路由表,還是復(fù)制一下名稱了。例如我們的系統(tǒng)路由表是這樣的

{
  "routerMap": [
    {
      "name": "dialog",
      "pageSourceFile": "src/main/ets/pages/dialog/DialogPage.ets",
      "buildFunction": "dialogBuilder"
    },
    {
      "name": "web",
      "pageSourceFile": "src/main/ets/pages/web/WebPage.ets",
      "buildFunction": "webBuilder"
    },
    {
      "name": "login",
      "pageSourceFile": "src/main/ets/pages/login/LoginPage.ets",
      "buildFunction": "loginBuilder"
    }
  ]
}

我們現(xiàn)在實現(xiàn)一個hvigorfile插件,來解析系統(tǒng)路由表中的name字段,并生成對應(yīng)的枚舉值。示例如下

import { hapTasks, OhosHapContext, OhosPluginId } from '@ohos/hvigor-ohos-plugin'
import { HvigorPlugin, HvigorNode, FileUtil } from '@ohos/hvigor'
function parseRouterMap(): HvigorPlugin {
  return {
    pluginId: 'parseRouterMap',
    apply(node: HvigorNode) {
      const hapCtx = node.getContext(OhosPluginId.OHOS_HAP_PLUGIN) as OhosHapContext
      const moduleJson = hapCtx.getModuleJsonOpt()
      const routerMapName = moduleJson['module']['routerMap'].split(':')[1]
      const dir = hapCtx.getModulePath()
      const srcFile = FileUtil.pathResolve(dir, 'src', 'main', 'resources', 'base', 'profile', `${routerMapName}.json`)
      const json = FileUtil.readJson5(srcFile)
      const routerMapFile = FileUtil.pathResolve(dir, 'src', 'main', 'ets', 'Pages.ets')
      FileUtil.ensureFileSync(routerMapFile)
      const routerMapArray = json['routerMap']
      let ss = ''
      for (const element of routerMapArray) {
        const name = element['name']
        ss += `  ${name} = '${name}',\n`
      }
      ss = `export enum Pages {\n${ss}}`
      FileUtil.writeFileSync(routerMapFile, ss)
    }
  }
}
export default {
  system: hapTasks,
  plugins:[parseRouterMap()]
}

我們在ets目錄下生成了一個Pages.ets文件,并將所有navigation頁面生成對應(yīng)的枚舉值,頁面跳轉(zhuǎn)時,使用這些枚舉值就不怕出錯了。Pages.ets內(nèi)容如下

export enum Pages {
  dialog = 'dialog',
  web = 'web',
  login = 'login',
}

到此這篇關(guān)于鴻蒙開發(fā)Hvigor插件動態(tài)生成代碼的文章就介紹到這了,更多相關(guān)鴻蒙開發(fā)Hvigor插件動態(tài)生成代碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • uniapp引入支付寶原生掃碼插件步驟詳解

    uniapp引入支付寶原生掃碼插件步驟詳解

    這篇文章主要為大家介紹了uniapp引入支付寶原生掃碼插件步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 微信小程序應(yīng)用號開發(fā)體驗

    微信小程序應(yīng)用號開發(fā)體驗

    這篇文章主要介紹了微信小程序(應(yīng)用號)開發(fā)體驗的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 詳解inet_pton()和inet_ntop()函數(shù)

    詳解inet_pton()和inet_ntop()函數(shù)

    這篇文章主要介紹了inet_pton()和inet_ntop()函數(shù),本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • prometheus之Pushgateway安裝和使用方法

    prometheus之Pushgateway安裝和使用方法

    Pushgateway是prometheus的一個組件,prometheus?server默認是通過exporter主動獲取數(shù)據(jù),本文給大家介紹prometheus之Pushgateway安裝和使用教程,感興趣的朋友一起看看吧
    2024-05-05
  • 使用git命令將本地代碼上傳到GitHub

    使用git命令將本地代碼上傳到GitHub

    這篇文章介紹了使用git命令將本地代碼上傳到GitHub,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-03-03
  • MobaXterm最新激活專業(yè)版

    MobaXterm最新激活專業(yè)版

    MobaXterm是一款遠程終端控制軟件,集串口,SSH遠程登錄和FTP傳輸三合一的工具,便攜版操作簡單,使用非常方便,這篇文章主要介紹了MobaXterm激活專業(yè)版,需要的朋友可以參考下
    2023-06-06
  • git_stats?web代碼圖形統(tǒng)計工具詳解

    git_stats?web代碼圖形統(tǒng)計工具詳解

    倉庫代碼統(tǒng)計工具之一,可以按git提交人、提交次數(shù)、修改文件數(shù)、代碼行數(shù)、注釋量在時間維度上進行統(tǒng)計,亦可按各文件類型進行簡單的統(tǒng)計,非常方便.本文給大家介紹git_stats?web代碼圖形統(tǒng)計工具,需要的朋友參考下吧
    2021-12-12
  • ant?design?vue?圖片預(yù)覽組件自定義樣式

    ant?design?vue?圖片預(yù)覽組件自定義樣式

    這篇文章主要為大家介紹了ant?design?vue?圖片預(yù)覽組件自定義樣式方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • win10 + anaconda3 + python3.6 安裝tensorflow + keras的步驟詳解

    win10 + anaconda3 + python3.6 安裝tensorflow + keras的步驟詳解

    這篇文章主要介紹了win10 + anaconda3 + python3.6 安裝tensorflow + keras的步驟,需要的朋友可以參考下
    2019-09-09
  • RabbitMQ隊列中間件消息持久化?確認機制?死信隊列原理

    RabbitMQ隊列中間件消息持久化?確認機制?死信隊列原理

    這篇文章主要介紹了消息隊列中間件之RabbitMQ消息的持久化、確認機制、死信隊列原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05

最新評論

澳门| 滨州市| 正定县| 梁河县| 固始县| 当雄县| 乌兰浩特市| 永年县| 兴安盟| 旌德县| 邹平县| 黄石市| 措勤县| 体育| 沁水县| 桂阳县| 郑州市| 南康市| 土默特右旗| 兰考县| 吴江市| 曲周县| 兴义市| 泌阳县| 锡林郭勒盟| 遵义市| 海林市| 延安市| 九龙坡区| 永新县| 康乐县| 郴州市| 五家渠市| 仪陇县| 阿勒泰市| 西畴县| 阿巴嘎旗| 南宁市| 江川县| 萝北县| 阿荣旗|