当我跑步时
$ composer.phar install
安装的软件包来自哪里?
我知道Packagist是PHP软件包的默认存储库,而composer.json
中缺少不同的软件包,这就是composer将查找软件包的地方。
但是,我不清楚的是Composer和Packagist是如何互动的。
Composer是否直接从packagist.org
或者,Composer是否从packagist
获取git / svn / hg存储库链接并直接从存储库下载文件?
还是其他什么?
答案 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文件中。 :)