Maison > outils de développement > composer > Utilisez l'attribut replace pour éviter les conflits de dépendances avec Composer

Utilisez l'attribut replace pour éviter les conflits de dépendances avec Composer

藏色散人
Libérer: 2021-03-12 11:28:59
avant
3847 Les gens l'ont consulté

La rubrique suivante du tutoriel de com poser présentera comment utiliser l'attribut replace pour éviter les conflits de dépendances dans Composer. J'espère que cela sera utile aux amis dans le besoin !

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

Liste les packages qui sont remplacés par ce package. De cette façon, vous pouvez créer un package et le publier sous un nom différent avec votre propre numéro de version, et les packages qui nécessitent le package d'origine peuvent continuer à utiliser votre package fork car il remplace le package d'origine.

En supposant que votre logiciel utilise original/library et other/package, ils nécessitent eux-mêmes original/library.

Maintenant, vous pensez original/library que de nouvelles fonctionnalités doivent être intégrées, mais les responsables ne sont pas d'accord avec votre suggestion d'être implémentée dans leur package. Vous décidez donc de créer une bibliothèque sous le nom better/library et de marquer une nouvelle version.

Retour au logiciel. Bien sûr, il devrait commencer à utiliser le package better/library, alors utilisez-le à la place, mais other/package nécessite toujours original/library - duplication de code ! Comment faire en sorte que ce package utilise votre better/library au lieu de original/library ? Au lieu de le bifurquer et de simplement modifier composer.json (vous êtes toujours compatible avec original/library donc ça devrait fonctionner) ?

Vous devez ajouter le mot-clé replace dans composer.json :

"replace": {
    "original/library":"1.0.2"
}
Copier après la connexion

Maintenant, Composer sait que lors de la résolution de la dépendance de "other/package", tout package de "better/library" est aussi bon comme "original/bibliothèque".

Ceci est également utile pour les packages qui contiennent des sous-packages, par exemple le package principal symfony/symfony contient tous les composants Symfony, qui sont également disponibles sous forme de packages séparés. Si vous avez besoin du package principal, il satisfera automatiquement aux exigences de l'un des composants individuels puisqu'il les remplacera.

Même règle, juste un angle légèrement différent : intégrer les composants du framework est une bonne solution pour tout autre composant nécessitant certaines fonctionnalités. Cependant, si vous avez besoin d'un framework complet dans votre logiciel et qu'une autre bibliothèque nécessite un composant de ce framework, la déclaration replace du framework évite à Composer d'avoir à installer ce composant unique deux fois car il est déjà inclus dans le framework complet.

Remarque : remplacer les espaces réservés dans les builds est généralement mauvais

Dans ma réponse originale, j'ai suggéré :

"replace": {
    "original/library":"1.*"
}
Copier après la connexion

Ceci La conséquence est : le compositeur va maintenant traiter la version 1.0.0 de votre bibliothèque est aussi bonne que n'importe quelle version 1.x de la bibliothèque d'origine, même si un jour ils corrigent quelque chose ou ajoutent des fonctionnalités et publient la version 1.2.34. Cela signifie également que si un jour votre "autre/package" est mis à jour et nécessite "original/library:^1.1", votre remplacement dans la bibliothèque est toujours actif et déclare qu'il peut être remplacé par n'importe quelle version 1*, même si vous ne mettez rien à jour en interne - cela ne sera pas fait, mais si vous ne faites aucun travail, votre ancien code n'implémentera jamais les nouvelles fonctionnalités de la bibliothèque d'origine, mais le contenu de remplacement s'affiche simplement J'ai ça.

Donc, essentiellement : évitez d'utiliser des versions génériques dans les versions de remplacement ! Si vous les utilisez, vous faites des déclarations sur l'avenir que vous ne pouvez pas connaître ou prédire (à moins que vous ne puissiez contrôler original/library , mais même dans ce cas, soyez très prudent). Assurez-vous d'utiliser original/library que vous connaissez et que vous pouvez complètement réimplémenter.

Adresse originale : https://stackoverflow.com/questions/18882201/how-does-the-replace-property-work-with-composer

Adresse de traduction : https : //learnku.com/laravel/t/55200

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal