三脉 / version-info
版本信息解析器
0.2.2
2024-02-17 10:53 UTC
Requires
- php: >=7.4
- ext-json: *
Requires (Dev)
- ergebnis/composer-normalize: ^2.8
- friendsofphp/php-cs-fixer: ^2.16
- infection/infection: >=0.16
- phan/phan: >1.3.0
- php-coveralls/php-coveralls: ^2.3
- phpstan/phpstan: >=0.10
- phpunit/phpunit: ^9.3
- vimeo/psalm: >=3.0.16
This package is auto-updated.
Last update: 2024-09-17 12:26:00 UTC
README
这个小库解决了包需要了解或报告自己版本的问题。
这不是一个新问题,例如,有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
之外,还有GitVersionReader
和ComposerBranchAliasVersionReader
。有关详细信息,请参阅此示例。
缓存
这些类中的任何一个都不进行自己的缓存。如果你需要缓存和懒加载,请尝试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许可协议授权。