【发布时间】:2021-05-06 08:43:27
【问题描述】:
我正在尝试使用\Composer\Semver\VersionParser 比较包版本,例如^6.1||^6.2||^6.3,但没有得到预期的结果。
我是这样分解版本的
$currentVersion = '6.3';
$requiredPackage = '^6.1||^6.2||^6.3';
$compatibleVersions = explode('||', $requiredPackage);
$lowestSupported = ltrim(current($compatibleVersions), '^');
$highestSupported = ltrim(end($compatibleVersions), '^');
$parser = new VersionParser();
$lowestSupported = $parser->normalize($lowestSupported);
$highestSupported = $parser->normalize($highestSupported);
$isLower = version_compare($currentVersion, $lowestSupported, '<');
$isHigher = version_compare($currentVersion, $highestSupported, '>');
if ($isLower || $isHigher) {
return false;
}
这适用于$currentVersion 为6.3 的情况,但我认为6.3.4.0 会失败,因为虽然^6.3 匹配包,但由于VersionParser 将版本6.3 标准化为6.3.0.0 ,并且它无法正确解析^6.3 以允许6.3.4.0。
有什么想法吗?
【问题讨论】:
-
可以
vierbergenlars/php-semver帮助你吗? -
另外,这与 Shopware 有什么关系?
-
接下来:如果您已经使用
composer/semver的解析器,为什么不也使用他们的比较器? -
它与shopware没有直接关系,但我需要使用Shopware中已经存在的库,这就是我标记它的原因。你能指出比较器包,我会检查它是否存在于安装中。没有通用的 PHP 解决方案吗?
-
这与语义版本控制有什么关系? SemVer standard 需要 Major.Minor.Patch 三元组,不允许四元组。
标签: php composer-php shopware semantic-versioning