You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 18:52:33