Node.js中混合格式版本标签排序:求替代compare-versions的方案
在Node.js中排序混合格式的Docker版本标签并找出最高版本号
需要对来自Dockerhub等第三方源的混合格式版本标签列表进行排序,以找出最高版本号。示例标签如下:
const tagList = ['0.0.1', '0.0.2', '0.0.3-alpha1', '1.10-alpine3', '1.9.2']
此前使用Python的packaging.version.LegacyVersion可实现该排序,但在Node.js中使用compare-versions库时,因非语义化版本标签报错,无法完成排序。尝试的代码如下:
import { compareVersions } from 'compare-versions'; const versions = ['0.0.1', '0.0.2', '0.0.3-alpha1', '1.10-alpine3', '1.9.2']; let latest; try { latest = versions.sort(compareVersions).pop(); } catch { latest = versions.sort((a,b)=>a-b).pop(); }; console.log(latest);
预期输出:
1.10-alpine3
实际输出:
1.9.2
若移除try/catch强制使用compareVersions排序函数,会抛出以下错误:
/Users/banbone/project/node_modules/compare-versions/lib/umd/index.js:14 throw new Error(`Invalid argument not valid semver ('${version}' received)`); ^ Error: Invalid argument not valid semver ('1.10-alpine3' received) at validateAndParse (/Users/banbone/project/node_modules/compare-versions/lib/umd/index.js:14:19) at compareVersions (/Users/banbone/project/node_modules/compare-versions/lib/umd/index.js:53:20) at Array.sort (<anonymous>) at file:///Users/banbone/project/test.js:5:19 at ModuleJob.run (node:internal/modules/esm/module_job:218:25) at async ModuleLoader.import (node:internal/modules/esm/loader:329:24) at async loadESM (node:internal/process/esm_loader:28:7) at async handleMainPromise (node:internal/process/esm_loader:113:12) Node.js v21.2.0
寻求Node.js中类似LegacyVersion的等效包,或可行的自定义排序方法。
内容的提问来源于stack exchange,提问作者banbone
相关产品推荐
相关产品推荐

