【问题标题】:composer: How to find the exact version of a package?作曲家:如何找到一个包的确切版本?
【发布时间】:2012-05-27 21:51:15
【问题描述】:

假设我正在编写一个库 A,它依赖于另一个库,例如 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.*"
    }

有什么想法吗?

【问题讨论】:

    标签: php dependency-management package-managers composer-php


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      composer.phar show
      

      将显示所有当前安装的软件包及其版本信息。 (这仅在使用现已弃用的 -i 选项时在 Composer 的早期版本中显示。)

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

      composer.phar show monolog/monolog
      

      这将显示很多东西,包括提交 MD5 哈希、源 URL、许可证类型等。

      【讨论】:

      • php composer.phar show -aphp composer.phar show package/name 也很有帮助。
      • 对于dev-master 包,这很有用,因为它还显示了提交哈希。所以你需要去GitHub,找到那个commit hash,检查日期,然后找到日期最近的标签,才能真正找出你正在使用的“版本”
      • 也可以在 composer.lock 文件中找到。
      【解决方案3】:

      你可以像这样使用作曲家表演:

      composer show package/name
      

      【讨论】:

        【解决方案4】:

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

        Linux 控制台 sn-p (composer & 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;
        

        【讨论】:

          【解决方案5】:

          你可以使用 show all,特别是当没有 package.json 文件时,从 packagist.org 获取可用的包:

          composer show "monolog/monolog" --all
          

          你也可以指定版本

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

          【讨论】:

            【解决方案6】:

            如果您使用git version control system.您将轻松搜索任何包

            composer show |grep packagename
            

            举例

            composer show |grep monolog
            

            如果你没有安装 git。您可以从this link 安装 grep 程序。 并将其与环境变量链接,如果您不知道how to link program with environment variables,则可以查看此链接,链接后在上面编写相同的命令

            【讨论】:

              【解决方案7】:

              如果你想检查 PHP 本身的版本,你可以使用 composer Runtime Utilities:

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

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2015-11-26
                • 2018-11-21
                • 2017-06-28
                • 2018-10-24
                • 1970-01-01
                • 2018-04-13
                • 2015-09-03
                相关资源
                最近更新 更多