目录

OHPM版本号规则

ohpm管理的三方包的版本号遵循语义化版本控制(SemVer 2.0.0)规则。

版本号格式

版本号格式:主版本号.次版本号.修订号[-先行版本号][+构建信息], 正例:1.0.0-PRERELEASE+BUILD

[h2]格式约束

[h2]特殊版本号示例

版本比较规则

版本比较时优先比较标准版本号部分(即:主版本号.次版本号.修订号),优先级为:主版本号 > 次版本号 > 修订号。比较方式如下:

[h2]标准版本与先行版本比较规则

标准版本与先行版本比较方式如下:

// 示例1
> 依赖`liba`在仓库存在的版本有:['1.0.0-snapshot.1', '1.0.0-snapshot.2', '1.0.0', '2.0.0-snapshot.1', '2.0.0-snapshot.2', '2.0.0', '3.0.0-snapshot.1', '3.0.0-snapshot.2']
> entry模块依赖`liba`,entry的oh-package.json5配置:{
  "name": "entry",
  "version": "1.0.0",
  "description": "Please describe the basic information.",
  "main": "Index.ets",
  "license": "Apache-2.0",
  "dependencies": {
    "liba": ">=1.0.0"
  }
}
> ohpm install后安装的`liba`版本为:`2.0.0`

// 示例2
> 依赖`liba`在仓库存在的版本有:['1.0.0-snapshot.1', '1.0.0-snapshot.2', '2.0.0-snapshot.1', '2.0.0-snapshot.2']
> entry模块依赖`liba`,entry的oh-package.json5配置:{
  "name": "entry",
  "version": "1.0.0",
  "description": "Please describe the basic information.",
  "main": "Index.ets",
  "license": "Apache-2.0",
  "dependencies": {
    "liba": ">=1.0.0"
  }
}
> ohpm install后安装的`liba`版本为:`2.0.0-snapshot.2`

// 示例3
> 依赖`liba`在仓库存在的版本有:['1.0.0', '1.0.2-snapshot', '2.0.0-snapshot.1', '2.0.0-snapshot.2']
> entry模块依赖`liba`,entry的oh-package.json5配置:{
  "name": "entry",
  "version": "1.0.0",
  "description": "Please describe the basic information.",
  "main": "Index.ets",
  "license": "Apache-2.0",
  "dependencies": {
    "liba": "^1.0.0"
  }
}
> 工程级配置依赖`liba`,工程级的
oh-package.json5配置:{
  "modelVersion": "x.0.0",
  "description": "Please describe the basic information.",
  "dependencies": {
    "liba": "1.0.2-snapshot"
  }
}
> ohpm install后安装的`liba`版本为:`1.0.2-snapshot`

// 示例4
> 依赖`liba`在仓库存在的版本有:['1.0.0-snapshot', '1.0.0']
> entry模块依赖`liba`,entry的oh-package.json5配置:{
  "name": "entry",
  "version": "1.0.0",
  "description": "Please describe the basic information.",
  "main": "Index.ets",
  "license": "Apache-2.0",
  "dependencies": {
    "liba": ">=1.0.0-snapshot"
  }
}
> ohpm install后安装的`liba`版本为:`1.0.0`

// 示例5
> 依赖`liba`在仓库存在的版本有:['0.0.1','1.0.0-snapshot', '1.0.1-snapshot']
> entry模块依赖`liba`,entry的oh-package.json5配置:{
  "name": "entry",
  "version": "1.0.0",
  "description": "Please describe the basic information.",
  "main": "Index.ets",
  "license": "Apache-2.0",
  "dependencies": {
    "liba": ">=1.0.0-snapshot"
  }
}
> ohpm install后安装的`liba`版本为:`1.0.1-snapshot`

// 示例6
> 依赖`liba`在仓库存在的版本有:['1.0.0-snapshot.1', '1.0.0-snapshot.2', '2.0.0-snapshot.1', '2.0.0-snapshot.2']
> entry模块依赖`liba`,entry的oh-package.json5配置:{
  "name": "entry",
  "version": "1.0.0",
  "description": "Please describe the basic information.",
  "main": "Index.ets",
  "license": "Apache-2.0",
  "dependencies": {
    "liba": ">=1.0.0-snapshot"
  }
}
> ohpm install后安装的`liba`版本为:`2.0.0-snapshot.2`

[h2]先行版本间比较规则

当标准版本部分一致时,版本大小由先行版本号决定;即先行版本号按 "." 分割的标识符逐个比较,每个标识符按字符从左到右逐个比较,详细如下:

版本范围操作符

[h2]^(尖号)

使用^(插入符)会将要安装或升级的版本的主版本号固定,最高允许升级到主版本下的最新版本。当主版本号为0时,将固定从左往右的第一位非零版本;适用场景:希望自动获取当前主版本下的最新版本。

// ^使用示例
^1.2.301 等价于:1.2.301 <= 版本 < 2.0.0。 // 固定主版本号:1不变
^0.2.301 等价于:0.2.301 <= 版本 < 0.3.0。 // 固定从左往右的第一位非零版本,即次版本号:2不变
^0.0.301 等价于:0.0.301 <= 版本 < 0.0.302。// 固定从左往右的第一位非零版本,即修订号:301不变

从OHPM v5.0.11即DevEco Studio 5.0.7.210开始,^(插入符)的含义始终为固定主版本,不再固定从左往右的第一位非零版本。

// ^语义统一后示例
^1.2.301 等价于:1.2.301 <= 版本 < 2.0.0 // 固定主版本号:1不变
^0.2.301 等价于:0.2.301 <= 版本 < 1.0.0 // 固定主版本号:0不变
^0.0.301 等价于:0.0.301 <= 版本 < 1.0.0 // 固定主版本号:0不变

[h2]~(波浪号)

使用~(波浪符)会将要安装或升级的版本的主版本号、次版本号固定,最高允许升级到主版本号.次版本号下的最新版本;适用场景:希望只接受修订号更新,不自动升级主版本号和次版本号。

// ~使用示例
~1.2.301 等价于:1.2.301 <= 版本 < 1.3.0 // 固定主版本号.次版本号:1.2不变
~1.2 等价于: ~1.2.0` 等价于:1.2.0 <= 版本 < 1.3.0 // 固定主版本号.次版本号:1.2不变
~1 等价于: ~1.x` 等价于:1.0.0 <= 版本 < 2.0.0-0 // 固定主版本号:1不变(特殊)
~0.10.100 等价于:0.10.100 <= 版本 < 0.11.0 // 固定主版本号.次版本号:0.10不变
~0.0 等价于:0.0.0 <= 版本 < 0.1.0 // 固定主版本号.次版本号:0.0不变
~0 等价于:0.x 等价于:0.0.0 <= 版本 < 1.0.0-0 // 固定主版本号:0不变(特殊)

[h2]-(连字符)/...(省略符)

用于明确声明一个连续的版本区间,包含起始和结束版本(前后需要有空格);"-"在跨工具链支持上更全面,应优先选用;适用场景:希望定义闭区间并简化表达式。

// 使用示例
1.0.1 - 2.1.1 等价于:1.0.1 <= 版本 <= 2.1.1
1.0.1 ... 2.1.1 等价于:1.0.1 <= 版本 <= 2.1.1
// 左侧版本存在版本缺省时示例
1.1 - 2.1.0 等价于 1.1.0 <= 版本 <= 2.1.0
// 右侧版本存在版本缺省时示例
1.1.0 - 2.1 等价于 1.1.0 <= 版本 < 2.2.0-0 
1.1.0 - 2 等价于 1.1.0 <= 版本 < 3.0.0-0

[h2]大小关系比较(>、<、>=、<=、=)

按字面意义匹配版本范围,正例:">1.2.0" 表示版本需高于1.2.0及以下版本。

通配符与逻辑符

[h2]x 或 *(通配符)

匹配任意值,通常用于省略字段, 简化范围定义。

// 通配符使用示例
1.x 等价于:1.0.0 <= 版本 < 2.0.0 等价于:^1.0.0
1.1.x 等价于:1.1.0 <= 版本 < 1.2.0 等价于:~1.1.0

[h2]空格分割(逻辑与)

多个范围条件使用空格分割时,默认以逻辑与(&&)连接,需同时满足所有条件。

// 空格使用示例
>=1.0.101 <2.0.100 等价于:1.0.101 <= 版本 < 2.0.100

[h2]||(逻辑或)

组合多个范围版本,满足任意一个即可。

// 逻辑或使用示例
^1.0.101 || ^2.0.100 等价于:1.0.101 <= 版本 < 2.0.0 或 2.0.100 <= 版本 < 3.0.0