


Utilisez l'attribut replace pour éviter les conflits de dépendances avec Composer
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" }
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.*" }
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Lorsque vous développez des sites Web à l'aide de CRAFTCMS, vous rencontrez souvent des problèmes de mise en cache de fichiers de ressources, en particulier lorsque vous mettez fréquemment à mettre à jour les fichiers CSS et JavaScript, les anciennes versions des fichiers peuvent toujours être mises en cache par le navigateur, ce qui fait que les utilisateurs ne voient pas les derniers changements de temps. Ce problème affecte non seulement l'expérience utilisateur, mais augmente également la difficulté du développement et du débogage. Récemment, j'ai rencontré des problèmes similaires dans mon projet, et après une exploration, j'ai trouvé le plugin wiejeben / artist-laravel-mix, qui a parfaitement résolu mon problème de mise en cache.

Résumé de l'article: Cet article fournit des instructions détaillées étape par étape pour guider les lecteurs sur la façon d'installer facilement le cadre Laravel. Laravel est un puissant cadre PHP qui accélère le processus de développement des applications Web. Ce didacticiel couvre le processus d'installation des exigences du système à la configuration des bases de données et à la configuration du routage. En suivant ces étapes, les lecteurs peuvent jeter rapidement et efficacement une base solide pour leur projet Laravel.

J'ai rencontré un problème délicat lors du développement d'un nouveau projet Laravel: comment créer rapidement un système de gestion de contenu entièrement fonctionnel et facile à gérer (CMS). J'ai essayé plusieurs solutions, mais toutes ont abandonné en raison d'une configuration complexe et d'une maintenance gênante. Jusqu'à ce que je découvre le package Laravelcms MKI-LABS / ESPRESSO, qui non seulement simple à installer, mais fournit également des fonctions puissantes et une interface de gestion intuitive, ce qui a complètement résolu mon problème.

J'ai un problème difficile lors du développement d'une application Web complexe: comment gérer efficacement les erreurs JavaScript et les enregistrer. J'ai essayé plusieurs méthodes, mais aucun d'eux ne pouvait répondre à mes besoins jusqu'à ce que je trouve cette bibliothèque dvasilenko / alterrego_tools. J'ai facilement résolu ce problème grâce à l'installation de cette bibliothèque via Composer et j'ai considérablement amélioré la maintenabilité et la stabilité du projet. Le compositeur peut être appris par l'adresse suivante: Adresse d'apprentissage

Dans le développement de projets, il est souvent nécessaire de créer des outils de ligne de commande pour simplifier les tâches quotidiennes ou automatiser les processus. Cependant, la création d'une interface de ligne de commande qui est belle et facile à tester n'est pas facile. Récemment, j'ai rencontré ce problème lors du développement d'un projet qui nécessite des outils de ligne de commande. Après une certaine exploration, j'ai trouvé la bibliothèque Symfony / Console, qui simplifie considérablement le processus de création des interfaces de ligne de commande.

J'ai rencontré un problème commun mais délicat lors du développement d'un grand projet PHP: comment gérer et injecter efficacement les dépendances. Initialement, j'ai essayé d'utiliser des variables globales et une injection manuelle, mais cela a non seulement augmenté la complexité du code, il a également conduit facilement à des erreurs. Enfin, j'ai résolu avec succès ce problème en utilisant l'interface de conteneur PSR-11 et avec la puissance du compositeur.

Pendant le développement, des demandes HTTP sont souvent nécessaires, ce qui peut être d'obtenir des données, d'envoyer des données ou d'interagir avec des API externes. Cependant, face à des environnements de réseau complexes et à la modification des exigences de demande, comment gérer efficacement les demandes HTTP devient un défi. J'ai rencontré un problème dans un projet: je dois envoyer fréquemment des demandes à différentes API et enregistrer les demandes pour faciliter le débogage et l'analyse ultérieures. Après avoir essayé plusieurs méthodes, j'ai découvert la bibliothèque Yiche / HTTP. Il simplifie non seulement le traitement des demandes HTTP, mais fournit également des fonctions de journalisation dynamique, améliorant considérablement l'efficacité de développement.

Lorsque vous développez des projets de framework YII, vous rencontrez souvent des situations où vous devez obtenir une grande quantité de données de la base de données. Si des mesures appropriées ne sont pas prises, l'obtention directement de toutes les données peut entraîner un débordement de mémoire et affecter les performances du programme. Récemment, lorsque j'avais affaire à un projet sur une grande plate-forme de commerce électronique, j'ai rencontré ce problème. Après quelques recherches et essais, j'ai finalement résolu le problème par le biais de la bibliothèque d'extension de Pavle / Yii-Batch-Result.
