ohpm管理的三方包的版本号遵循语义化版本控制(SemVer 2.0.0)规则。
版本比较时优先比较标准版本号部分(即:主版本号.次版本号.修订号),优先级为:主版本号 > 次版本号 > 修订号。比较方式如下:
标准版本与先行版本比较方式如下:
// 示例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` 举例:2.0.0-beta.2与2.0.0-beta.11比较,标准版本:"2.0.0" 部分一致,大小由先行版本号部分:beta.2和beta.11决定;按 "." 分割后,第一段标识符"beta"一致,进而比较数字部分:2 < 11,故:2.0.0-beta.2 < 2.0.0-beta.11。
举例:4.0.0-beta.2与4.0.0-rc.1比较,标准版本:"4.0.0" 一致,比较 "beta.2" 与 "rc.1" 部分,因首个字符字典序:b < r,故:4.0.0-beta.2 < 4.0.0-rc.1。
举例:1.0.0-1 < 1.0.0-a。
举例:3.0.0-alpha < 3.0.0-alpha.1。
举例:2.1.0-100-1002与2.1.0-1001-001比较,标准版本部分 "2.1.0" 一致,比较 "100-1002" 与 "1001-001" 部分,从左到右逐字符(按ASCII字典序)比较,在第四位字符时:"-" < "1",故:2.1.0-100-1002 < 2.1.0-1001-001。
使用^(插入符)会将要安装或升级的版本的主版本号固定,最高允许升级到主版本下的最新版本。当主版本号为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不变
使用~(波浪符)会将要安装或升级的版本的主版本号、次版本号固定,最高允许升级到主版本号.次版本号下的最新版本;适用场景:希望只接受修订号更新,不自动升级主版本号和次版本号。
// ~使用示例 ~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不变(特殊)
用于明确声明一个连续的版本区间,包含起始和结束版本(前后需要有空格);"-"在跨工具链支持上更全面,应优先选用;适用场景:希望定义闭区间并简化表达式。
// 使用示例 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
按字面意义匹配版本范围,正例:">1.2.0" 表示版本需高于1.2.0及以下版本。
匹配任意值,通常用于省略字段, 简化范围定义。
// 通配符使用示例 1.x 等价于:1.0.0 <= 版本 < 2.0.0 等价于:^1.0.0 1.1.x 等价于:1.1.0 <= 版本 < 1.2.0 等价于:~1.1.0
多个范围条件使用空格分割时,默认以逻辑与(&&)连接,需同时满足所有条件。
// 空格使用示例 >=1.0.101 <2.0.100 等价于:1.0.101 <= 版本 < 2.0.100
组合多个范围版本,满足任意一个即可。
// 逻辑或使用示例 ^1.0.101 || ^2.0.100 等价于:1.0.101 <= 版本 < 2.0.0 或 2.0.100 <= 版本 < 3.0.0