


Verwenden Sie das Attribut „replace', um Composer-Abhängigkeitskonflikte zu vermeiden
vorgestellt, um die Verwendung des Ersetzungsattributs vorzustellen, um die Abhängigkeitskonfliktmethode des Komponisten zu vermeiden. Ich hoffe, es wird den bedürftigen Freunden hilfreich sein! Die Composer-Dokumentation enthält zwei grundlegende Beispiele. Ich versuche es zu erklären:
Listen Sie die Pakete auf, die durch dieses Paket ersetzt werden. Auf diese Weise können Sie ein Paket forken und es unter einem anderen Namen mit Ihrer eigenen Versionsnummer veröffentlichen, und Pakete, die das Originalpaket erfordern, können Ihr geforktes Paket weiterhin verwenden, da es das Originalpaket ersetzt.
Angenommen, Ihre Software verwendetoriginal/library
undother/package
, die ihrerseitsoriginal/library
erfordern. Jetzt denken Sie, dassoriginal/library
neue Funktionen integrieren muss, aber die Betreuer sind mit Ihrem Vorschlag zur Implementierung in ihrem Paket nicht einverstanden. Sie beschließen also, die Bibliothek unter dem Namenbetter/library
zu forken und sie als neue Version zu kennzeichnen.
Zurück zur Software. Natürlich sollte das Paket better/library
verwendet werden, also verwenden Sie stattdessen dieses, aber other/package
erfordert immer noch den Code original/library
wiederholen! Wie bringen Sie dieses Paket dazu, Ihre better/library
anstelle von original/library
zu verwenden? Anstatt es zu forken und einfach „composer.json“ zu ändern (Sie sind immer noch mit original/library
kompatibel, also sollte es funktionieren)? original/library
和 other/package
,它们本身也需要 original/library
。
现在你认为 original/library
需要集成新功能,但是维护人员不同意你的建议在他们的软件包中实现。 所以你决定以 better/library
的名称派生该库,并标记一个新发行版。
回到软件。当然,它应该开始使用 better/library
包,所以要用它来代替,但 other/package
仍然需要 original/library
- 代码重复!如何让那个包使用你的 better/library
来代替 original/library
?而不需要对它进行 fork ,只需要修改 composer.json(你仍然与 original/library
兼容,所以它应该可以工作了)?
你需要增加 replace 关键字在 composer.json
:
"replace": { "original/library":"1.0.2" }
现在 Composer 知道,在解决 「other/package」的依赖关系时,任何来自 「better/library」的包都与「original/library」一样好。
这对于包含子包的包也很有用,例如,主 symfony/symfony 包包含所有 Symfony 组件,这些组件也可以作为单独的包使用。如果您需要主包,它将自动满足单个组件之一的要求,因为它将替换它们。
相同的规则,只是角度略有不同:对于需要某些功能的任何其他组件,引入框架的组件是一种不错的方法。但是,如果你在软件中需要完整的框架,而另一个库又需要该框架的组件,则该框架的 replace
声明使 Composer 不必两次安装该单个组件,因为它已经包含在完整的框架中。
注意: 替换版本中的占位符通常是不好的
在我最初的回答中,我建议:
"replace": { "original/library":"1.*" }
这带来的后果是:Composer现在将把你的库版本 1.0.0 和原来库的任何版本 1.x 一样好,即使他们在某一天修复了一些东西或添加了一些特性并发布了版本1.2.34。这也意味着,如果某一天你的「other/package」得到更新,并且需要「original/library:^1.1」,你库中的替换仍处于活动状态,并声明它可以替换任何版本 1*
,,即使你不更新内部的任何内容-这样做也无法完成,但是如果你不做任何工作,你的旧代码就永远不会实现原始库的新功能,但替换内容恰恰说明了这一点。
因此,从本质上讲:在替换版本中避免使用通配符版本! 如果使用它们,则会对你无法了解或预测的未来做出声明(除非你可以控制 original/library
,但即使这样也要非常小心)。 一定要使用你知道的并且可以完全重新实现的 original/library
composer.json
hinzufügen: rrreee🎜🎜Gleiche Regeln, nur eine etwas andere Perspektive: Wie bei jeder anderen Komponente, die eine gewisse Funktionalität benötigt, ist die Einführung der Komponenten des Frameworks ein guter Weg. Wenn Sie jedoch ein vollständiges Framework in Ihrer Software benötigen und eine andere Bibliothek eine Komponente dieses Frameworks benötigt, erspart dieJetzt weiß Composer, dass beim Auflösen von Abhängigkeiten von „other/package“ jedes Paket aus „better/library“ „original“ sein wird /library“ ist genauso gut.
Dies ist auch für Pakete nützlich, die Unterpakete enthalten, z. B. enthält das Hauptpaket Symfony/Symfony alle Symfony-Komponenten, die auch als separate Pakete verfügbar sind. Wenn Sie das Hauptpaket benötigen, erfüllt es automatisch die Anforderungen für eine der Einzelkomponenten, da es diese ersetzt.
replace
-Deklaration des Frameworks Composer die doppelte Installation dieser einzelnen Komponente, da sie bereits in einem vollständigen Framework enthalten ist rahmen. 🎜🎜🎜 HINWEIS: Das Ersetzen von Platzhaltern in Versionen ist im Allgemeinen schlecht 🎜🎜🎜 In meiner ursprünglichen Antwort habe ich Folgendes vorgeschlagen: 🎜rrreee🎜 Die Konsequenz daraus ist: Composer wird Ihre Bibliothek jetzt auf 1.0 versionieren. 0 ist so gut wie jede Version 1.x der ursprünglichen Bibliothek, auch wenn sie eines Tages etwas korrigierten oder einige Funktionen hinzufügten und Version 1.2.34 veröffentlichten. Das bedeutet auch, dass, wenn Ihr „other/package“ eines Tages aktualisiert wird und „original/library:^1.1“ erfordert, die Ersetzung in Ihrer Bibliothek immer noch aktiv ist und erklärt, dass sie jede Version 1*
ersetzen kann >, auch wenn Sie darin nichts aktualisieren – es wird nicht durchgeführt, aber wenn Sie keine Arbeit leisten, wird Ihr alter Code niemals die neue Funktionalität der Originalbibliothek implementieren, aber der Ersatzinhalt veranschaulicht genau dies . 🎜🎜Also grundsätzlich: Vermeiden Sie Wildcard-Versionen in Ersatzversionen! Wenn Sie sie verwenden, machen Sie Aussagen über die Zukunft, die Sie nicht kennen oder vorhersagen können (es sei denn, Sie haben die Kontrolle über original/library
, aber seien Sie selbst dann sehr vorsichtig). Stellen Sie sicher, dass Sie ein Original/eine Bibliothek
verwenden, das Sie kennen und vollständig neu implementieren können. 🎜🎜🎜Originaladresse: https://stackoverflow.com/questions/18882201/how-does-the-replace-property-work-with-composer🎜🎜Übersetzungsadresse: https://learnku.com/laravel/t/ 55200🎜🎜Das obige ist der detaillierte Inhalt vonVerwenden Sie das Attribut „replace', um Composer-Abhängigkeitskonflikte zu vermeiden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Bei der Entwicklung von Websites mit CraftCMS stoßen Sie häufig mit Ressourcendateiproblemen, insbesondere wenn Sie häufig CSS und JavaScript -Dateien aktualisieren, alte Versionen von Dateien möglicherweise weiterhin vom Browser zwischengespeichert. Dieses Problem wirkt sich nicht nur auf die Benutzererfahrung aus, sondern erhöht auch die Schwierigkeit der Entwicklung und des Debuggens. Kürzlich habe ich in meinem Projekt ähnliche Probleme gestoßen, und nach einigen Erkundungen fand ich das Plugin Wiejeben/Craft-Laravel-Mix, das mein Caching-Problem perfekt löste.

Artikelzusammenfassung: Dieser Artikel enthält detaillierte Schritt-für-Schritt-Anweisungen, um die Leser zu leiten, wie das Laravel-Framework einfach installiert werden kann. Laravel ist ein leistungsstarkes PHP -Framework, das den Entwicklungsprozess von Webanwendungen beschleunigt. Dieses Tutorial deckt den Installationsprozess von den Systemanforderungen bis zur Konfiguration von Datenbanken und das Einrichten von Routing ab. Durch die Ausführung dieser Schritte können die Leser schnell und effizient eine solide Grundlage für ihr Laravel -Projekt legen.

Ich habe ein schwieriges Problem bei der Entwicklung eines neuen Laravel-Projekts gestoßen: So erstellen Sie schnell ein voll funktionsfähiges und einfach zu verwaltetes Inhaltsverwaltungssystem (CMS). Ich habe mehrere Lösungen ausprobiert, aber alle haben aufgrund komplexer Konfiguration und unbequemer Wartung aufgegeben. Bis ich das LaravelCMS-Paket MKI-Labs/Espresso entdeckte, das nicht nur einfach zu installieren, sondern auch leistungsstarke Funktionen und intuitive Verwaltungsschnittstellen bietet, die mein Problem vollständig gelöst haben.

Ich habe ein schwieriges Problem bei der Entwicklung einer komplexen Webanwendung: So behandeln Sie JavaScript -Fehler effektiv und protokollieren Sie sie. Ich habe mehrere Methoden ausprobiert, aber keiner von ihnen konnte meine Bedürfnisse erfüllen, bis ich diese Bibliothek Dvasilenko/Alterego_tools fand. Ich habe dieses Problem durch die Installation dieser Bibliothek durch Komponist leicht gelöst und die Wartbarkeit und Stabilität des Projekts erheblich verbessert. Komponist kann über die folgende Adresse gelernt werden: Lernadresse

In der Projektentwicklung ist es häufig erforderlich, Befehlszeilen-Tools zu erstellen, um die täglichen Aufgaben zu vereinfachen oder Prozesse zu automatisieren. Das Erstellen einer Befehlszeilenschnittstelle, die schön und leicht zu testen ist, ist jedoch nicht einfach. Vor kurzem habe ich dieses Problem gestoßen, als ich ein Projekt entwickelt habe, für das Befehlszeilen -Tools erforderlich sind. Nach einiger Erkundung fand ich die Symfony/Console -Bibliothek, die den Erstellungsprozess von Befehlszeilenschnittstellen erheblich vereinfacht.

Bei der Entwicklung eines großen PHP -Projekts habe ich ein häufiges, aber schwieriges Problem gestoßen: So verwalten und injizieren Sie Abhängigkeiten effektiv. Zunächst habe ich versucht, globale Variablen und manuelle Injektion zu verwenden, dies erhöhte jedoch nicht nur die Komplexität des Codes, sondern führte auch leicht zu Fehlern. Schließlich habe ich dieses Problem erfolgreich gelöst, indem ich die PSR-11-Containerschnittstelle und die Leistung des Komponisten verwendete.

Während der Entwicklung sind häufig HTTP -Anfragen erforderlich, um Daten zu erhalten, Daten zu senden oder mit externen APIs zu interagieren. Wenn jedoch komplexe Netzwerkumgebungen konfrontiert und die Anforderungen an die Anforderung konfrontiert sind, wird die effiziente Bearbeitung von HTTP -Anforderungen zur Herausforderung. Ich habe ein Problem in einem Projekt gestoßen: Ich muss häufig Anfragen an verschiedene APIs senden und die Anfragen protokollieren, um die nachfolgende Debugging und Analyse zu erleichtern. Nachdem ich mehrere Methoden ausprobiert hatte, entdeckte ich die Yiche/HTTP -Bibliothek. Es vereinfacht nicht nur die Verarbeitung von HTTP -Anforderungen, sondern bietet auch dynamische Protokollierungsfunktionen, wodurch die Entwicklungseffizienz stark verbessert wird.

Bei der Entwicklung von YII -Framework -Projekten begegnen Sie häufig Situationen, in denen Sie eine große Datenmenge aus der Datenbank erhalten müssen. Wenn nicht geeignete Maßnahmen ergriffen werden, kann das direkte Erhalten aller Daten einen Speicherüberlauf verursachen und die Programmleistung beeinflussen. Kürzlich, als ich ein Projekt auf einer großen E-Commerce-Plattform zu tun hatte, habe ich dieses Problem gestoßen. Nach einiger Forschung und Versuch löste ich das Problem schließlich über die Erweiterungsbibliothek von Pavle/Yii-Batch-Result.
