Composer:如何找到一个包的确切版本?

158

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

我想安装最新版本的Monolog,所以我只需要将以下内容放入composer.json文件中:

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

然后我运行$ php composer.phar install

我本以为安装的版本会在composer.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,在我的composer.json文件中我想要放置类似于以下内容的东西:

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

有任何想法吗?


1
这个问题的一个相关提示:如果你使用PhpStorm作为你的IDE,任何composer.json文件都会在每个依赖项旁边显示你安装的实际版本。 - BadHorsie
8个回答

234

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

composer.phar show

将显示所有当前安装的软件包及其版本信息。(在以前的Composer版本中,只有在使用现已废弃的-i选项时才会显示。)

要查看更多详细信息,请同时指定软件包名称:

composer.phar show monolog/monolog

这将显示许多内容,包括提交的MD5哈希值、源URL、许可证类型等。


13
php composer.phar show -aphp composer.phar show package/name 同样都很有用。 - bishop
1
对于 dev-master 包,这非常有用,因为它还显示了提交哈希值。因此,您需要前往 GitHub,找到该提交哈希值,检查日期,然后找到在此之前最近的标签,以真正找出您正在使用的“版本”。 - andrewtweber
4
它也可以在 composer.lock 文件中找到。 - Hafiz
要列出以特定字符串开头的所有软件包,您可以使用*通配符: composer show 'package/*' - meyegui

78

您可以像这样使用composer show:

composer show package/name

21

如果您只是想获取软件包版本号输出,例如: 1.7.51.x-devdev-master

Linux控制台片段(composer & sed):

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

或者(composer,grep和cut):

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

非常好的答案!谢谢。我用它来比较多个项目之间的Symfony版本。 - thiagobraga

11

当没有package.json文件时,可以使用show all命令,并从packagist.org获取可用的软件包:

composer show "monolog/monolog" --all

同时,您可以指定版本。

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

8
如果您正在使用 git版本控制系统,您可以轻松地搜索任何软件包。
composer show |grep packagename

举例来说

composer show |grep monolog

如果您没有安装 Git,您可以从 此链接 安装 grep 程序,将其与环境变量关联,并在 Cmd 中输入相同的命令。
如果您不知道如何将程序与环境变量关联,请在关联后查看 此链接,然后在上面写入相同的命令。

6

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

查找composer软件包可用版本的最佳位置是Packagist,因为这是安装软件包时composer从中加载版本的地方。monolog版本列在http://packagist.org/packages/monolog/monolog上。


5

如果您想在PHP本身中检查版本号,可以使用composer运行时工具:

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

请查看https://getcomposer.org/doc/07-runtime.md获取更多信息。

0

要通过名称查找软件包,请运行以下命令(laravel是一个示例)

composer search laravel

要查找有关软件包的信息,请运行以下命令(laravel/laravel 是一个示例)

composer show -a laravel/laravel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接