news 2026/7/10 16:26:37

鸿蒙(HarmonyOS)Hvigor 构建插件:实现 HAR 模块 SNAPSHOT 版本自动替换时间戳

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸿蒙(HarmonyOS)Hvigor 构建插件:实现 HAR 模块 SNAPSHOT 版本自动替换时间戳

鸿蒙(HarmonyOS)Hvigor 构建插件:实现 HAR 模块 SNAPSHOT 版本自动替换时间戳

前言

在 HarmonyOS 项目开发中,HAR 模块的版本管理是一个常见需求。如果你使用1.0.0-SNAPSHOT这类快照版本,每次构建时手动改版本号非常麻烦。本文介绍一个零侵入的 Hvigor 插件,只需在hvigorfile.ts中引入即可,构建或运行时自动将 SNAPSHOT 版本号替换为毫秒时间戳,如:
1.0.0-SNAPSHOT → 1.0.0-SNAPSHOT.1762827340027

## 插件源码 在项目根目录的`hvigor/`目录下创建`snapshot-version-plugin.ts`文件:```typescript import * as fs from 'fs'; import * as path from 'path'; import { HvigorPlugin, HvigorNode } from '@ohos/hvigor'; /** * 快照版本替换插件。 * * === 功能说明 === * 在 DevEco Studio 构建或运行 HAR 模块时,自动将 oh-package.json5 中的 * SNAPSHOT 版本号替换为带毫秒时间戳的快照版本: * 1.0.0-SNAPSHOT → 1.0.0-SNAPSHOT.1762827340027 * 1.0.0-SNAPSHOT.1 → 1.0.0-SNAPSHOT.1762827340027 * 1.0.0-SNAPSHOT.12345 → 1.0.0-SNAPSHOT.1762827340027 * * === 使用方式 === * 在任意 HAR 模块的 hvigorfile.ts 中: * * import { snapshotVersionPlugin } from '../hvigor/snapshot-version-plugin'; * * export default { * system: harTasks, * plugins: [snapshotVersionPlugin], * }; */ export const snapshotVersionPlugin: HvigorPlugin = { // Hvigor 插件唯一标识 pluginId: 'snapshot-version-plugin', /** * Hvigor 插件入口,模块加载时自动调用 * @param node - HvigorNode 对象,node.getNodePath() 返回模块根目录路径 */ apply(node: HvigorNode) { // 步骤 1:获取当前模块的 oh-package.json5 路径 const modulePath = node.getNodePath(); const packageJsonPath = path.join(modulePath, 'oh-package.json5'); // 步骤 2:检查文件是否存在 if (!fs.existsSync(packageJsonPath)) { return; } // 步骤 3:读取文件内容 const content = fs.readFileSync(packageJsonPath, 'utf-8'); // 步骤 4:正则匹配 SNAPSHOT 版本号 // 匹配 "version": "x.y.z-SNAPSHOT" 或 "x.y.z-SNAPSHOT.N" const snapshotPattern = /"version"\s*:\s*"([^"]*-SNAPSHOT(?:\.[0-9]+)?)"/; const match = content.match(snapshotPattern); // 步骤 5:替换为时间戳版本 if (match) { // 生成 13 位毫秒时间戳 const timestamp = Date.now().toString(); // 替换 -SNAPSHOT.* → -SNAPSHOT.{timestamp} const newVersion = match[1].replace(/-SNAPSHOT.*$/,`-SNAPSHOT.${timestamp}`); // 写回文件 const newContent = content.replace(snapshotPattern,`"version":"${newVersion}"`);fs.writeFileSync(packageJsonPath,newContent,'utf-8');}},};

使用方式

  1. 项目结构
    YourProject/
    ├── hvigor/
    │ └── snapshot-version-plugin.ts ← 插件文件
    ├── SnapShotHar/
    │ ├── hvigorfile.ts ← 引入插件
    │ └── oh-package.json5 ← 版本号 “1.0.0-SNAPSHOT”
    └── SnapShotHar2/
    ├── hvigorfile.ts ← 同样引入
    └── oh-package.json5

  2. 在模块中引入插件:
    编辑 xxx.har模块/hvigorfile.ts:

import{harTasks}from'@ohos/hvigor-ohos-plugin';import{snapshotVersionPlugin}from'../hvigor/snapshot-version-plugin';exportdefault{system:harTasks,plugins:[snapshotVersionPlugin],// 注册插件};
  1. 设置 har模块的oh-package.json5 版本号,加上-SNAPSHOT
{"name":"snapshothar","version":"1.0.0-SNAPSHOT","description":"Please describe the basic information.","main":"Index.ets","author":"","license":"Apache-2.0","dependencies":{}}
  1. 构建/运行
    在 DevEco Studio 中直接构建或运行该模块,插件会自动触发,oh-package.json5 中的版本号变为:
"version":"1.0.0-SNAPSHOT.1762827340027"

每次构建都会生成新的时间戳,无需手动修改。

工作原理

步骤说明
Hvigor 加载模块 hvigorfile.ts,调用 apply(node)
node.getNodePath() 获取模块根目录路径
拼接 oh-package.json5 完整路径
读取文件,正则匹配 SNAPSHOT 版本号
生成 13 位毫秒时间戳,替换版本号,写回文件

正则表达式说明:

/"version"\s*:\s*"([^"]*-SNAPSHOT(?:\.[0-9]+)?)"/↑ ↑ 匹配SNAPSHOT可选匹配.N数字后缀

适用场景

  • 多个 HAR 模块需要独立管理快照版本
  • CI/CD 流水线中自动生成唯一版本号
  • 多人协作时避免版本号冲突

注意事项

1, 插件只在 oh-package.json5 存在时生效,非 HAR 模块不受影响
2, 每次构建/运行都会生成新的时间戳,覆盖旧版本号
3, 建议将 oh-package.json5 的初始版本号设为 1.0.0-SNAPSHOT(不带 .N 后缀)

总结

这个插件仅需一行 import 和一行 plugins 注册,即可实现 HAR 模块的 SNAPSHOT 版本自动管理。代码简洁,零侵入,适合集成到任何 HarmonyOS 项目中。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 13:07:28

AI语音硬件设计:TP9243S与TP9311音频芯片协同方案详解

摘要:本文深入解析AI语音产品音频硬件设计,重点介绍TP9243S立体声ADC与TP9311单声道Codec的协同方案。TP9243S提供106dB SNR、差分输入和多芯片同步能力,支持构建16通道麦克风阵列,确保高质量音频采集。TP9311则具备110dB DAC SNR…

作者头像 李华
网站建设 2026/7/10 16:00:12

什么是中科天工包装技术?

本机构的包装技术以推动智能化包装体系的创新而闻名,致力于为客户提供高效的包装解决方案。它将自动化与数字化结合,使生产过程更智能、更高效。成为行业内的设备供应方领跑者中的佼佼者,亦不忘在市场变化中调整策略,提供灵活的设…

作者头像 李华
网站建设 2026/7/9 13:03:36

高精度信号采集系统:AD7175-8与PIC18LF47K40实战解析

1. 项目概述:高精度信号采集系统的核心价值在工业测量、医疗设备和科研仪器领域,信号采集的精度直接决定了整个系统的性能上限。AD7175-8这款32位Σ-Δ型ADC(模数转换器)以其0.0015%的积分非线性误差和最高144kSPS的采样率&#x…

作者头像 李华
网站建设 2026/7/9 13:03:21

如何用智能自动化工具League Akari提升你的英雄联盟游戏体验

如何用智能自动化工具League Akari提升你的英雄联盟游戏体验 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 英雄联盟玩家常常面临选择困难、数…

作者头像 李华
网站建设 2026/7/9 13:03:01

直流有刷驱动器与STM32的高效控制方案

1. 下一代直流有刷驱动器的核心需求解析 在工业自动化与消费电子领域,直流有刷电机因其结构简单、控制方便、成本低廉等优势,仍然是许多应用场景的首选动力源。但随着终端设备对能效、体积和智能化要求的不断提升,传统驱动器方案正面临三大核…

作者头像 李华