我正在使用Composer分发PHP包。 Composer版本通过他们的git标签打包。
我希望我的软件包能够在发出HTTP请求时使用的用户代理字符串中发送其版本号。
我的软件包一旦作为另一个软件包的依赖项安装,是否有可能获得它自己当前安装的版本号,假设这个版本号在源代码中的任何地方都没有硬编码?
当有问题的软件包是root软件包时,我可以通过post-package-install / post-package-update脚本在安装/更新时获取版本号。一个事件传递给我可以从中获取当前安装的版本:
public static function write(\Composer\Script\CommandEvent $event)
{
$composer = $event->getComposer();
$localRepository = $composer->getRepositoryManager()->getLocalRepository();
$package = $composer->getPackage($localRepository, 'my/package-name', null);
file_put_contents(__DIR__ . '/../version', $package->getVersion());
}
但是,对于security reasons,安装/更新父包时不会运行依赖项脚本,因此不会飞。
可能的一行是运行composer show -i my/package-name
并解析版本号,但这不是很便携。 (PHP可执行文件在哪里?composer.phar文件在哪里?等等)
另一个可能是将Composer本身作为依赖项,并使用它自己的一些逻辑,如上面的代码示例所示。但是将Composer本身作为一种依赖包含在内是一件很臃肿的事。
我在Composer自己的源代码中看到它将自己的版本指定为'@package_version@'
,但据我所知,这仅适用于Composer本身,并且当Composer将自身编译为phar文件。
我可以解析root包中composer.lock文件的版本号。这看起来很混乱,但我认为这就是我现在要做的事情。
还有其他解决方案吗?我觉得有一些非常简单的东西我不知道。
答案 0 :(得分:1)
您可以执行类似https://github.com/mcuelenaere/composer-revision-plugin的操作:这会生成一个PHP类,其中包含构建时所有编写器依赖项的git修订版。