三脉/version-info

版本信息解析器

资助包维护!
三脉

0.2.2 2024-02-17 10:53 UTC

This package is auto-updated.

Last update: 2024-09-17 12:26:00 UTC


README

Latest Stable Version Coverage Status

这个小库解决了包需要了解或报告自己版本的问题。

这不是一个新问题,例如,有ocramius/package-versions,但它严重依赖于Composer,并且不是没有相关的IO开销。

相反,这个包解决了相同的问题,但没有任何额外的IO。你需要做的是指导Git在添加文件到标记发布版本的存档时,扩展占位符(下面有详细说明)。然后将这个常数喂给这个库,这就是你的版本。

当然,你不能确定人们总是从存档中安装包。在这种情况下,你可以使用上面提到的ocramius/package-versions,或者使用这个库提供的两个辅助类,从Git或从composer.json中的分支别名获取版本字符串。

安装

composer require sanmai/version-info

这个库需要PHP 7.4或更高版本。它在PHP 7.x和8.0下进行了测试。

使用

创建一个包含以下常量的PHP类(或使用现有的类)

const VERSION_INFO = '$Format:%h%d by %an +%ae$'; // or '$Format:%h%d$'

修改.gitattributes,使用export-subst属性指定包含类的文件路径

/src/MyVersion.php     export-subst

在你想知道版本的地方调用版本读取器

$reader = \VersionInfo\PlaceholderVersionReader(MyVersion::VERSION_INFO);
$version = $versionReader->getVersionString();

if ($version !== null) {
    return $version;
}

// Fallback on other methods, or return a dummy version.
// See src/Example.php for a complete example.

就是这样!

测试

为了验证你的版本常量是否被正确替换,你可以使用git archive命令,指向一个标签或分支

git archive --format=tar v1.1 | grep --text VERSION_INFO

常数应该包含类似以下内容

c3ff8f6 (tag: v1.1) by John Doe +john.doe@example.com

备用读取器

除了PlaceholderVersionReader之外,还有GitVersionReaderComposerBranchAliasVersionReader。有关详细信息,请参阅此示例

缓存

这些类中的任何一个都不进行自己的缓存。如果你需要缓存和懒加载,请尝试Later,一个延迟对象管理器

use function Later\later;

$deferredVersion = later(function () {
    $reader = \VersionInfo\PlaceholderVersionReader(MyVersion::VERSION_INFO);
    
    yield $version = $versionReader->getVersionString();
});

// And at some later point...
$deferredVersion->get(); // returns memoized version string, computing it on the spot, as needed

许可

本项目根据MIT许可协议授权。