Heim Entwicklungswerkzeuge composer Verwenden Sie das Attribut „replace', um Composer-Abhängigkeitskonflikte zu vermeiden

Verwenden Sie das Attribut „replace', um Composer-Abhängigkeitskonflikte zu vermeiden

Mar 12, 2021 am 11:28 AM
composer replace

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 verwendet original/library und other/package, die ihrerseits original/library erfordern.

Jetzt denken Sie, dass original/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 Namen better/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/libraryother/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"
}
Nach dem Login kopieren

现在 Composer 知道,在解决 「other/package」的依赖关系时,任何来自 「better/library」的包都与「original/library」一样好。

这对于包含子包的包也很有用,例如,主 symfony/symfony 包包含所有 Symfony 组件,这些组件也可以作为单独的包使用。如果您需要主包,它将自动满足单个组件之一的要求,因为它将替换它们。

相同的规则,只是角度略有不同:对于需要某些功能的任何其他组件,引入框架的组件是一种不错的方法。但是,如果你在软件中需要完整的框架,而另一个库又需要该框架的组件,则该框架的 replace  声明使 Composer 不必两次安装该单个组件,因为它已经包含在完整的框架中。

注意: 替换版本中的占位符通常是不好的

在我最初的回答中,我建议:

"replace": {
    "original/library":"1.*"
}
Nach dem Login kopieren

这带来的后果是:Composer现在将把你的库版本 1.0.0 和原来库的任何版本 1.x 一样好,即使他们在某一天修复了一些东西或添加了一些特性并发布了版本1.2.34。这也意味着,如果某一天你的「other/package」得到更新,并且需要「original/library:^1.1」,库中的替换仍处于活动状态,并声明它可以替换任何版本 1*,,即使你不更新内部的任何内容-这样做也无法完成,但是如果你不做任何工作,你的旧代码就永远不会实现原始库的新功能,但替换内容恰恰说明了这一点。

因此,从本质上讲:在替换版本中避免使用通配符版本! 如果使用它们,则会对你无法了解或预测的未来做出声明(除非你可以控制 original/library ,但即使这样也要非常小心)。 一定要使用你知道的并且可以完全重新实现的 original/library

Sie müssen das Schlüsselwort „replace“ in composer.json hinzufügen:
rrreee

Jetzt 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.
🎜🎜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 die 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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Lösen Lösen Apr 18, 2025 am 09:24 AM

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.

Laravel Framework Installationsmethode Laravel Framework Installationsmethode Apr 18, 2025 pm 12:54 PM

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.

So bauen Sie schnell Laravelcms mit Komponisten: MKI-Labs/Espresso Praktische Erfahrung So bauen Sie schnell Laravelcms mit Komponisten: MKI-Labs/Espresso Praktische Erfahrung Apr 18, 2025 am 07:36 AM

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.

So lösen Sie das Problem der JavaScript -Fehlerbehandlung mit Composer So lösen Sie das Problem der JavaScript -Fehlerbehandlung mit Composer Apr 18, 2025 am 08:30 AM

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

Praktische Erfahrung in der Erstellung effizienter Befehlszeilenschnittstellen mithilfe der Symfony/Console -Bibliothek Praktische Erfahrung in der Erstellung effizienter Befehlszeilenschnittstellen mithilfe der Symfony/Console -Bibliothek Apr 18, 2025 am 07:30 AM

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.

Verwenden von Komponisten zur Lösung der Abhängigkeitsinjektion: Anwendung der PSR-11-Containerschnittstelle Verwenden von Komponisten zur Lösung der Abhängigkeitsinjektion: Anwendung der PSR-11-Containerschnittstelle Apr 18, 2025 am 07:39 AM

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.

So verwenden Sie Komponist, um HTTP -Anforderungsprobleme zu beheben: Ein praktischer Leitfaden zur Yiche/HTTP -Bibliothek So verwenden Sie Komponist, um HTTP -Anforderungsprobleme zu beheben: Ein praktischer Leitfaden zur Yiche/HTTP -Bibliothek Apr 18, 2025 am 08:06 AM

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.

So verwenden Sie Komponist, um das Problem der Stapelverarbeitung von Daten im Rahmen von YII -Framework zu lösen So verwenden Sie Komponist, um das Problem der Stapelverarbeitung von Daten im Rahmen von YII -Framework zu lösen Apr 18, 2025 am 07:54 AM

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.

See all articles