作曲家: 如何找到一个包的确切版本?

假设我正在编写一个库 A,它依赖于另一个库,例如,monolog。

我想要安装最新版本的 monolog,所以我只是把它放在 poser.json 中:

{
"require": {
"monolog/monolog": "*.*.*"
}
}

然后我运行 $ php composer.phar install

我本来期望找到安装的版本,在 poser.lock 里面,但是它不在那里:

{
"hash": "d7bcc4fe544b4ef7561918a8fc6ce009",
"packages": [
{
"package": "monolog/monolog",
"version": "dev-master",
"source-reference": "2eb0c0978d290a1c45346a1955188929cb4e5db7"
}
],
"packages-dev": null,
"aliases": [


],
"minimum-stability": "dev",
"stability-flags": [


]
}

我需要这个版本,因为我想把我的库绑定到一组特定的版本上,例如: 如果我发现版本是1.3.5,那么在我的 poser.json 中,我想放入这样的内容:

    "require": {
"monolog/monolog": "1.3.*"
}

有什么想法吗?

164997 次浏览

从技术上讲,“ dev-master”是您最终在那里使用的确切版本。它是开发分支,因此也是最新的版本。

寻找编写器软件包的可用版本的最佳位置是 包装工,因为这是编写器从安装软件包时加载版本的位置。单语版本在 http://packagist.org/packages/monolog/monolog上列出。

我知道这是个老问题,但是..。

composer.phar show

将显示当前安装的所有包及其版本信息。(这在之前的 Composer 版本中只有在使用现在不推荐使用的 -i选项时才会显示。)

要查看更多细节,请指定包的名称:

composer.phar show monolog/monolog

这将显示许多内容,包括提交 MD5散列、源 URL、许可证类型等。

你可以这样使用作曲家秀:

composer show package/name

如果您只是想获得类似于 1.7.51.x-dev开发大师这样的软件包版本号的输出。

Linux 控制台代码片段(作曲家和 sed) :

composer show 'monolog/monolog' | sed -n '/versions/s/^[^0-9]\+\([^,]\+\).*$/\1/p'

或(作曲家,grep & cut) :

composer show 'monolog/monolog' | grep 'versions' | grep -o -E '\*\ .+' | cut -d' ' -f2 | cut -d',' -f1;

您可以使用 show all,特别是在没有 package.json 文件的情况下,从 packagist.org 获取可用的包:

composer show "monolog/monolog" --all

还可以指定版本

composer show "monolog/monolog" 1.* --all

如果您正在使用 Git 版本控制系统,您将很容易地搜索任何包

composer show |grep packagename

例如

composer show |grep monolog

如果没有安装 git,可以从 这个链接安装 grep 程序,将其与环境变量链接,并在 Cmd中编写相同的前一个命令

如果您不知道如何链接程序与环境变量,请浏览此连结链接后写上面的相同命令

如果你想检查 PHP 本身的版本,你可以使用作曲器运行时实用程序:

\Composer\InstalledVersions::getVersion('my/package')

有关更多信息,请参见 https://getcomposer.org/doc/07-runtime.md