Composer - 包可以获得自己的版本

时间:2015-03-03 03:13:11

标签: php composer-php

我正在使用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文件的版本号。这看起来很混乱,但我认为这就是我现在要做的事情。

还有其他解决方案吗?我觉得有一些非常简单的东西我不知道。

1 个答案:

答案 0 :(得分:1)

您可以执行类似https://github.com/mcuelenaere/composer-revision-plugin的操作:这会生成一个PHP类,其中包含构建时所有编写器依赖项的git修订版。