查看PHP Composer的install
命令的帮助,我看到以下两个选项
$ composer help install
Options:
--prefer-source Forces installation from package sources when possible, including VCS information.
--prefer-dist Forces installation from package dist even for dev versions.
什么是“dist”装置?我在作曲家网站和谷歌周围徘徊,但似乎没有任何解决这个问题的事情(所以我认为这对于熟悉Composer的人来说是核心和显而易见的事情 - 为新手问题道歉)
我假设--prefer-source
是Composer将要求Packagist获取存储库位置,然后checkout / clone / export / etc.项目本身。
如果是,那么--prefer-dist
从哪里下载?它下载了什么?
答案 0 :(得分:32)
根据http://getcomposer.org/doc/03-cli.md,--prefer-source
选项更愿意创建一个“版本控制存储库”的包目录。这相当于您键入:
$ git clone ...
或
$ svn checkout ...
--prefer-dist
选项更愿意创建非“版本控制存储库”,这相当于您键入:
$ git clone ... ; rm -fr dir/.git
或
$ svn export ...
此外,您可以在source
中为dist
和composer.json
定义单独的回购。这是一个例子:
{
"repositories": [
{
"type": "package",
"package": {
"name": "joshuaclayton/blueprint-css",
"version": "master",
"source": {
"url": "git://github.com/joshuaclayton/blueprint-css.git",
"type": "git",
"reference": "master",
}
}
},
{
"type": "package",
"package": {
"name": "fiftyone/mobi-lite-php",
"version": "2013.03.06",
"dist": {
"url": "http://iweb.dl.sourceforge.net/project/fiftyone/51Degrees.mobi-Lite-2013.03.06.php.zip",
"type": "zip"
},
}
}
]
}
注意:无论出于何种原因,当我使用--prefer-dist
时,我有时会遇到错误,例如
Fatal error: Cannot redeclare class Zend_Db_Adapter_Pdo_Abstract in ...
在我使用--prefer-source
时不会出现。出于这个原因,我只使用--prefer-source
,直到我弄清楚这个问题的原因。
答案 1 :(得分:8)
我不钦佩,甚至不赞成提供的答案,因为没有解决问题。所以尽管它有点太老了,但我发布这个答案是为了进一步提及这个问题。
通常作曲家会处理标签(例如1.2.7
),但事实并非如此。您可能还需要分支(如dev-master
)作为依赖项。
如果您希望作曲家需要标记,则只需复制本地文件(vendor
目录中的某个位置)。
如果你想让作曲家签出一个分支而不是一个标签,那么就有机会(作曲家的理性假设),你想要开发它(从而做出改变),所以作曲家克隆本地存储库(再次,vendor
目录中的某个位置。)
如果您想要标记,但仍然可以在本地开发,该怎么办?
使用--prefer-source
以及composer install
,composer update
或composer require
命令:
composer install symfony/symfony:3.4.* --prefer-source
如果您想要一个最新的开发分支怎么办,但您只是想获得新的东西并且不想参与其开发?
使用--prefer-dist
以及composer install
,composer update
或composer require
命令:
composer install symfony/symfony:dev-master --prefer-dist
答案 2 :(得分:2)
正如Composer's Documentation中明确指出的那样:
事实上,内部Composer将每个版本视为单独的包。虽然在使用Composer时这种区别并不重要,但是当您想要更改它时,这一点非常重要。
和
Dist :dist是包数据的打包版本。通常是已发布的版本,通常是稳定版本。
来源:来源用于开发。这将通常来自源代码存储库,例如git 。当您想要修改下载的包时,可以获取此内容。
所以,
包可以提供其中任何一个,甚至两者。根据某些因素,例如用户提供的选项和包装的稳定性,将优先考虑。
如果您正在检查分支机构,则假定您要在分支机构上工作,并且Composer实际上将repo克隆到供应商目录中的正确位置。
对于标签,它只是复制正确的文件而不实际克隆存储库。