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?
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.
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.
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 si vous voulez exiger un tag, tout en étant capable de le développer sur votre section locale?
utilisation --prefer-source
avec votre composer install
, composer update
ou composer require
commandes:
composer install symfony/symfony:3.4.* --prefer-source
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?
utilisation --prefer-dist
avec votre composer install
, composer update
ou composer require
commandes:
composer install symfony/symfony:dev-master --prefer-dist
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.