Php 作曲家偏爱dist和偏爱source之间的区别?

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

查看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”安装?我浏览了作曲家网站和谷歌,但似乎没有任何东西能够解决这个问题(因此我认为这是一些核心的东西,对熟悉作曲家的人来说是显而易见的——为这个新手问题道歉)

我假设
——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。感谢您的回复,它帮了大忙。注意:存储库的结构略有更改:。