web-dev-qa-db-fra.com

Comment la propriété "replace" fonctionne-t-elle avec le compositeur?

Alors, comment fonctionne la propriété " replace " avec composer ? J'ai lu le document du compositeur mais je ne le comprends toujours pas. La recherche de plus d'informations n'a pas répondu à mes questions.

Quand je regarde le fichier composer.json sur Laravel/Framework sur github. Je ne vois pas comment remplacer fonctionnerait. Quelqu'un peut-il m'expliquer comment cela fonctionne? Et à quoi va correspondre la variable "self.version"?

37
Ilyes512

La documentation de Composer donne deux exemples de base. Je vais essayer d'expliquer:

Répertorie les paquets remplacés par ce paquet. Cela vous permet de créer un package, de le publier sous un nom différent avec ses propres numéros de version, tandis que les packages nécessitant le package d'origine continuent de fonctionner avec votre fork car ils remplacent le package d'origine.

Supposons que votre logiciel utilise original/library et other/package, qui requiert également original/library

Vous pensez maintenant que original/library doit intégrer une fonctionnalité, mais les responsables ne laisseront pas votre suggestion se dérouler dans leur package. Vous décidez de diviser cette bibliothèque sous le nom better/library et de marquer une nouvelle version.

Retour à votre logiciel. Bien sûr, il devrait commencer à utiliser better/library, donc vous en avez besoin à la place, mais ce other/package nécessite toujours la duplication de code original/library! Comment pouvez-vous faire en sorte que cet autre paquet utilise votre better/library à la place sans le forger et simplement changer le composer.json (vous êtes toujours compatible avec ce original/library, donc cela devrait fonctionner)?

Vous ajoutez une clé de remplacement à votre composer.json:

"replace": {
    "original/library":"1.*"
}

Maintenant, Composer sait que tout paquet de votre better/library est aussi bon que le original/library lorsqu'il s'agit de résoudre les dépendances du other/package.

Ceci est également utile pour les packages contenant des sous-packages, par exemple, le package principal symfony/symfony contient tous les composants Symfony qui sont également disponibles en tant que packages individuels. Si vous avez besoin du paquet principal, il remplira automatiquement toutes les exigences de l'un des composants individuels, puisqu'il les remplacera.

Les mêmes règles, sous un angle légèrement différent: requérir des composants d'un framework est une bonne approche pour tout autre composant nécessitant certaines fonctionnalités. Mais si vous avez besoin du framework complet de votre logiciel, ainsi que d'une autre bibliothèque, qui nécessite également un composant de ce framework, la déclaration replace du framework permet à Composer de ne pas avoir à installer ce même composant deux fois, car il est déjà inclus dans la liste. cadre complet.

65
Sven

Lorsque vous créez votre propre paquet, vous définissez dans votre composer.json quel type de paquetages il/ provide qui indique à Composer que votre paquet l’a déjà installé.

Si vous utilisez la propriété replace , elle indique à Composer que votre paquet veut remplacer le paquet original par votre propre fork, de sorte que les autres paquets n'ont pas besoin de l'installer.

Par exemple, si le package a/a requiert b/b et que vous demandez de remplacer b/b, il ne sera pas téléchargé sur Composer install/update.

Ceci est expliqué plus en détail ici: Comment fonctionne la propriété «replace» dans Composer?

0
kenorb