作曲家首选和首选来源之间的区别?基本:那又怎样?!

2022-08-30 09:40:40

查看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的人来说,这是核心和显而易见的东西 - 为新手问题道歉)

我假设Composer会向Packagist询问存储库位置,然后签出/克隆/导出/等项目本身。--prefer-source

如果是这样,那么从哪里下载?它下载什么?--prefer-dist


答案 1

根据 http://getcomposer.org/doc/03-cli.md,该选项将更愿意创建一个“版本控制存储库”的包目录。这等效于您键入:--prefer-source

$ git clone ...

$ svn checkout ...

该选项将首选创建一个非“版本控制存储库”,这等效于您键入:--prefer-dist

$ git clone ... ; rm -fr dir/.git

$ svn export ...

此外,还可以在 中为 和 定义单独的存储库。下面是一个示例:sourcedistcomposer.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


答案 2

我不欣赏,甚至不赞成提供的答案,因为它没有解决这个问题。因此,尽管它有点太老了,但我还是发布了这个答案,以便进一步参考这个问题。


基本:

通常作曲家处理标签(如),但事实并非总是如此。您可能还需要一个分支(如 )作为依赖项。1.2.7dev-master

  • 如果您希望 Composer 需要一个标签,它只会将文件复制到本地(目录中的某个位置)。vendor

  • 如果你想让 composer 签出一个分支而不是一个标签,那么有机会(composer 的理性假设),你想开发它(从而进行更改),所以 composer 克隆了你本地的存储库(同样,在目录的某个地方)。vendor


那又怎样?!

问题:

如果您想需要一个标签,但仍然能够在本地开发它,该怎么办?

答:

与您的 或 命令一起使用:--prefer-sourcecomposer requirecomposer update

composer require symfony/symfony:3.4.* --prefer-source

问题:

如果你想需要一个最新的开发分支,但你只想得到新的东西,不想参与它的开发,该怎么办?

答:

与 、 命令一起使用:--prefer-distcomposer requirecomposer update

composer require symfony/symfony:dev-master --prefer-dist

推荐