16

当我跑

$ composer.phar install

安装的软件包来自哪里?

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

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

  • Composer 是否直接从packagist.org

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

  • 或者是其他东西?

4

2 回答 2

16

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

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

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

然后composer搜索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"
    }
}

那么composer就不会去找packagist,而是直接去github下载repo。

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

于 2013-04-25T00:44:22.793 回答
2

Packagist.org 为用户提供了在那里注册他们的软件的方法,方法是让 Packagist 阅读他们在网络上某个地方发布的 composer.json 文件。

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

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

于 2013-04-24T23:06:02.200 回答