PHP Composer Packages 从何而来?

2022-08-31 01:08:17

当我跑步时

$ composer.phar install

安装的软件包来自哪里?

我知道 Packagist 是 PHP 软件包的默认仓库,并且在 中缺少不同的软件包,这是 composer 寻找软件包的地方。composer.json

但是,我不清楚的是Composer和Packagist是如何相互作用的。

  • 作曲家是否直接从packagist.org

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

  • 还是别的什么?


答案 1

这取决于文件的内容。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"
    }
}

然后作曲家不会寻找packagist,而是直接去github下载存储库。

在Packagist上注册的软件包通常是软件包的“权威”版本(不是fork),但是我发现有几个实例并非如此,因此您应该检查它以确保您正在提取预期的软件包。


答案 2

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

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

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


推荐