web-dev-qa-db-fra.com

Différence entre composer prefer-dist et prefer-source?

En regardant l'aide de la commande PHP Composer install, je vois les deux options suivantes

$ 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.

Qu'est-ce qu'une installation "dist"? J'ai fouillé le site composer et Google, mais il ne semble pas y avoir quoi que ce soit qui traite de cela (donc je suppose que c'est quelque chose de fondamental et d'évident pour les gens familiers avec Composer - excuses pour le question de débutant)

Je suppose que --prefer-source Est l'endroit où Composer demandera à Packagist l'emplacement du référentiel, puis extraira/clone/export/etc. le projet lui-même.

Si tel est le cas, d'où provient --prefer-dist? Que télécharge-t-il?

44
Alan Storm

Selon http://getcomposer.org/doc/03-cli.md , le --prefer-source l'option préférera créer un répertoire de package qui soit un "référentiel de contrôle de version". Cela revient à taper:

$ git clone ...

ou

$ svn checkout ...

Le --prefer-dist L'option préférera créer un non "référentiel de contrôle de version", ce qui équivaut à vous taper:

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

ou

$ svn export ...

Vous pouvez également définir des référentiels distincts pour source et dist dans votre composer.json. Voici un exemple:

{
    "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"
                },
            }
        }
    ]
}

REMARQUE: quelle qu'en soit la raison, lorsque j'utilise --prefer-dist, J'obtiens parfois des erreurs telles que

Fatal error: Cannot redeclare class Zend_Db_Adapter_Pdo_Abstract in ...

qui n'apparaissent pas lorsque j'utilise --prefer-source. Pour cette raison, j'utilise uniquement --prefer-source, jusqu'à ce que je trouve la cause de ce problème.

39
Ross Smith II

Je n'admire pas, ni même n'approuve la réponse fournie, car elle ne répond pas à la question. Donc, même si elle est un peu trop ancienne, je poste cette réponse pour toute référence à cette question.


Bases:

Normalement composer traite avec tags (comme 1.2.7), mais ce n'est pas toujours le cas. Vous pouvez également avoir besoin d'un branch (comme dev-master) comme dépendance.

  • Si vous voulez que composer nécessite un tag, il copie simplement les fichiers sur votre local (quelque part dans votre répertoire vendor).

  • Si vous voulez composer pour extraire une branche au lieu d'une balise, il y a de la chance (hypothèse rationnelle du compositeur), vous voulez la développer (apportant ainsi des modifications), donc composer clones le référentiel de votre local (encore une fois, quelque part dans le répertoire vendor).


Et alors?!

Question:

Et si vous voulez exiger un tag, tout en étant capable de le développer sur votre section locale?

Répondre:

utilisation --prefer-source avec votre composer install, composer update ou composer require commandes:

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

Question:

Que se passe-t-il si vous voulez avoir besoin d'un tout nouveau développement branch, mais vous voulez juste obtenir les nouveaux trucs et ne voulez pas vous engager dans son développement?

Répondre:

utilisation --prefer-dist avec votre composer install, composer update ou composer require commandes:

composer install symfony/symfony:dev-master --prefer-dist
10
Pmpr

Comme indiqué clairement dans Documentation du compositeur :

En fait, en interne Composer voit chaque version comme un package séparé . Bien que cette distinction n'ait pas d'importance lorsque vous utilisez Composer, elle est très importante lorsque vous souhaitez la modifier.

et,

Dist : La dist est une version packagée des données du paquet. Habituellement une version publiée, généralement une version stable.

Source : La source est utilisée pour le développement. Cela proviendra généralement d'un référentiel de code source, tel que git. Vous pouvez le récupérer lorsque vous souhaitez modifier le package téléchargé.

alors,

Les packages peuvent fournir l'un ou l'autre, voire les deux. En fonction de certains facteurs, tels que les options fournies par l'utilisateur et la stabilité de l'emballage, un sera préféré.

Si vous extrayez une branche, il est supposé que vous voulez travailler sur la branche et Composer clone en fait le dépôt à la bonne place dans votre répertoire de fournisseur.

Pour les balises, il copie simplement les bons fichiers sans cloner le dépôt.

3
wujt