PHP Composer软件包来自哪里?

时间:2013-04-24 22:12:25

标签: php composer-php

当我跑步时

$ composer.phar install

安装的软件包来自哪里?

我知道Packagist是PHP软件包的默认存储库,而composer.json中缺少不同的软件包,这就是composer将查找软件包的地方。

但是,我不清楚的是Composer和Packagist是如何互动的。

  • Composer是否直接从packagist.org

  • 下载文件
  • 或者,Composer是否从packagist获取git / svn / hg存储库链接并直接从存储库下载文件?

  • 还是其他什么?

2 个答案:

答案 0 :(得分:10)

这取决于composer.json文件的内容。

例如,如果您的composer.json只包含

{
    "require": {
        "phpunit/phpunit": "3.8.*@dev"
    }
}

然后作曲家搜索packagist,并在这里找到phpunit:

https://packagist.org/packages/phpunit/phpunit

告诉作曲家从这里加载phpunit:

https://github.com/sebastianbergmann/phpunit.git

如果您的composer.json包含

{
    "repositories": [
        {
            "type": "vcs",
            "url": "http://github.com/sebastianbergmann/phpunit"
        }
    ],
    "require": {
        "phpunit/phpunit": "3.8.*@dev"
    }
}

然后作曲家不会看包装,而是直接去github下载回购。

在Packagist上注册的软件包通常是软件包的“权威”版本(不是fork),但是我发现了几个 NOT 的情况,所以你应该检查它,以确保你正在拉你期望的包。

答案 1 :(得分:2)

Packagist.org通过指向Packagist来读取他们在网上某处发布的composer.json文件,从而为用户注册他们的软件。

通常的情况是一些常见的开源托管商,如github,这使得它非常容易,因为作曲家可以立即处理这样的git仓库。但是,您可以托管自己的git或svn或hg存储库,甚至只为每个软件版本发布现成的ZIP或TGZ文件。

作曲家直接从源下载,例如Packagist只知道这些来源并告诉你的作曲家实例去哪里。它通过从Packagist.org下载一堆包含所有信息的json文件来实现。这比查找托管所需库的位置更容易,并将此信息作为存储库条目添加到本地composer.json文件中。 :)