Php 作曲家偏爱dist和偏爱source之间的区别?
查看PHP Composer的Php 作曲家偏爱dist和偏爱source之间的区别?,php,composer-php,Php,Composer Php,查看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 ev
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”安装?我浏览了作曲家网站和谷歌,但似乎没有任何东西能够解决这个问题(因此我认为这是一些核心的东西,对熟悉作曲家的人来说是显而易见的——为这个新手问题道歉)
我假设——preference source
是Composer向Packagist询问存储库位置的地方,然后签出/克隆/导出项目本身
如果是这样,那么--更喜欢dist
从哪里下载?它下载什么?根据,--preference source
选项将更倾向于创建一个作为“版本控制存储库”的包目录。这相当于您键入:
$ git clone ...
$ git clone ... ; rm -fr dir/.git
或
--preferredist
选项更倾向于创建一个非“版本控制存储库”,这相当于您键入:
$ git clone ...
$ git clone ... ; rm -fr dir/.git
或
此外,您还可以在composer.json
中为source
和dist
定义单独的回购协议。下面是一个例子:
{
"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"
},
}
}
]
}
注意:无论出于何种原因,当我使用--preferreddist
时,有时会出现如下错误
Fatal error: Cannot redeclare class Zend_Db_Adapter_Pdo_Abstract in ...
当我使用时,这些选项不会出现--首选源代码。出于这个原因,我只使用——首选源代码,直到我找出这个问题的原因。如中所述:
实际上,内部Composer将每个版本看作是一个独立的包。当您使用Composer时,这一区别并不重要,但当您想要更改它时,这一点非常重要
以及
Dist:Dist是包数据的打包版本。通常是发布版本,通常是稳定版本
源代码:源代码用于开发。这通常源于源代码存储库,如git。当您想要修改下载的包时,可以获取此文件
所以
软件包可以提供其中一个,甚至两个。根据某些因素,例如用户提供的选项和包装的稳定性,将首选一个
如果您签出一个分支,则假定您希望处理该分支,Composer实际上会将repo克隆到供应商目录中的正确位置
对于标签,它只是复制正确的文件,而没有实际克隆repo。我不欣赏,甚至不认可提供的答案,因为它没有解决问题。因此,尽管它有点太旧了,我还是发布了这个答案,以供进一步参考
基本知识:
通常,composer处理标记(如1.2.7
),但情况并非总是如此。您可能还需要一个分支(如开发主机
)作为依赖项
- 如果您希望composer需要一个标记,它只需在本地(您的
供应商
目录中的某个地方)复制文件即可
- 如果您希望composer签出分支而不是标记,则有可能(composer的理性假设),您希望开发它(从而进行更改),因此composer克隆本地存储库(同样,在
供应商
目录的某个地方)
那么,什么?!
问题:
如果您需要一个标签,但仍然能够在本地开发该标签,该怎么办
答复:
使用--首选源代码
以及编写器安装
、编写器更新
或编写器要求
命令:
composer install symfony/symfony:3.4.* --prefer-source
composer install symfony/symfony:dev-master --prefer-dist
问题:
如果你想要一个最新的开发分支机构,但你只想得到新的东西而不想参与它的开发,那该怎么办
答复:
使用--首选dist
以及编写器安装
、编写器更新
或编写器要求
命令:
composer install symfony/symfony:3.4.* --prefer-source
composer install symfony/symfony:dev-master --prefer-dist
我完全在猜测“dist”是“distribution”的缩写@nickb这是在线文档让我相信的——但似乎没有任何东西能描述什么是分发。检查。看起来“dist”将是依赖项正在发布的稳定发行版,其中“source”将是最新快照,可能直接来自其源代码管理。请重新考虑更改接受的答案,作为我的正确答案。小的打字错误——preference srouce
应该是——preference source
,如果你忽略了那些标志,“dist”是默认值?当你出现这些错误时,composer dump autoload
——preference dist
不等于git签出减去.git
目录,虽然离得够近了。如您所述,您可以分别定义包的源URL和分发URL;如果不这样做,它将导致git归档而不是git签出。这意味着,.gittributes
选项将得到尊重-如果项目费心正确设置它,在生产站点中不必要(有时甚至有风险)的单元测试和类似文件通常会被忽略。此外,--preference dist
速度更快,不需要安装Git。感谢您的回复,它帮了大忙。注意:存储库的结构略有更改:。