58

查看PHP Composerinstall命令的帮助,我看到以下两个选项

$ 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-sourceComposer 会向 Packagist 询问存储库位置,然后是 checkout/clone/export/etc。项目本身。

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

4

3 回答 3

51

根据http://getcomposer.org/doc/03-cli.md,该--prefer-source选项将更喜欢创建一个包目录,即“版本控制存储库”。这相当于您输入:

$ git clone ...

或者

$ svn checkout ...

--prefer-dist选项将更喜欢创建一个非“版本控制存储库”,这相当于您键入:

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

或者

$ svn export ...

此外,您可以为sourcedist在您的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, 直到我找出这个问题的原因。

于 2013-04-25T03:20:28.357 回答
21

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


基本:

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

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

  • 如果您希望 composer 签出一个分支而不是一个标签,那么有机会(composer 的合理假设),您想要开发它(从而进行更改),因此 composer将存储库克隆到您的本地(同样,在目录中的某个位置vendor)。


所以呢?!

问题:

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

回答:

--prefer-source与您的composer requireorcomposer update命令一起使用:

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

问题:

如果您想要一个最新的开发分支,但您只是想获得新的东西而不想参与它的开发怎么办?

回答:

--prefer-dist与您的composer require,composer update命令一起使用:

composer require symfony/symfony:dev-master --prefer-dist
于 2017-10-09T08:22:30.427 回答
6

正如作曲家的文档中明确指出的那样:

事实上,Composer 内部将每个版本都视为一个单独的包。虽然在您使用 Composer 时这种区别并不重要,但在您想要更改它时却非常重要。

和,

Dist:dist 是包数据的打包版本。通常是发布版本,通常是稳定版本

Source:源用于开发。这通常来自源代码存储库,例如 git。当你想修改下载的包时,你可以获取它。

所以,

软件包可以提供其中任何一个,甚至两者都提供。根据某些因素,例如用户提供的选项和包的稳定性,将首选一个。

如果您要签出一个分支,则假定您要在该分支上工作,并且 Composer 实际上会将存储库克隆到您的供应商目录中的正确位置。

对于标签,它只是复制正确的文件而不实际克隆 repo。

于 2017-05-13T22:34:17.527 回答