Heim > Backend-Entwicklung > PHP-Tutorial > Komponist global verlangt als schädlich?

Komponist global verlangt als schädlich?

Joseph Gordon-Levitt
Freigeben: 2025-02-15 13:24:12
Original
389 Leute haben es durchsucht

Composer Global Require Considered Harmful?

Schlüsselpunkte

  • Sofern ein global installiertes Paket keine Abhängigkeiten hat, wird es jetzt als schlechte Praxis für die Installation von Paketen angesehen, die in mehreren Projekten verwendet werden. Dies liegt daran, dass wenn die Pakete denselben Raum teilen, Abhängigkeitskonflikte auftreten können. composer global require
  • Eine andere Lösung besteht darin, jedes Befehlszeilen -Tool in seinem eigenen lokalen Projekt zu installieren, indem Sie
  • manuell verwalten, die composer require oder binäre Dateien manuell verwalten. Dies kann jedoch Komplexität und Leidenschaft verleihen. Eine vorgeschlagene Änderung eines globalen Befehls kann ein "globales", aber isoliertes Projekt an einem bestimmten Standort installiert werden, wobei die Verzeichnisse der Anbieter und der Bin -Verzeichnisse an ihrem üblichen Standort erscheinen. $PATH
  • Ein neues Tool CGR (Composer Global Request) wurde als Alternative zur globalen Implementierung entwickelt. Es schafft isolierte Installationen für jedes Paket und vermeidet globale Abhängigkeitsprobleme. Dieses Tool befindet sich jedoch noch in der Proof of Concept -Phase und kann sich ändern. Es wird empfohlen, es zu testen, aber zu diesem Zeitpunkt nicht zu sehr darauf verlassen.
Wir haben zuvor Komponisten -Best Practices besprochen, und ich habe mich immer für die Installation von Paketen befasst, die in mehreren Projekten verwendet werden können (insbesondere in Befehlszeilen -Tools). Dann stieß ich eines Tages auf diese Diskussion.

composer global require

Kurz gesagt, die meisten Menschen scheinen jetzt zu glauben, dass globales Erfordernis eine schlechte Praxis ist, es sei denn, das global installierte Paket hat keine Abhängigkeiten. Technisch gesehen ist dies sinnvoll, wenn man eine einzige Umgebung für alle Projekte verwendet, aber wie ich in dieser Diskussion kommentierte, ist dieses Problem irrelevant, und die Gesamtsituation wird eigentlich nicht tatsächlich nicht isoliertes Umfeld wie Docker verwendet, und die Gesamtsituation wird eigentlich nicht tatsächlich Schäden verursachen. Composer Global Require Considered Harmful?

op Die empfohlene Lösung für dieses Problem ist:

Alternativ sollten Benutzer

verwenden, um jedes Befehlszeilen -Tool in ihrem eigenen lokalen Projekt zu installieren und ihre
oder binären Dateien manuell zu verwalten (zum Beispiel, indem bereits aus dem Verzeichnis von

Bin das symbolische Links vorhanden ist ). composer require $PATH $PATH Für mich ist dies eine völlig inakzeptable Komplikation. Der Komponist war schon immer der Stolz von PHP, da es einfach zu bedienen ist und das Paketmanagement Neulingsfreundlichkeit - lokal

oder
global macht. Symbolverbindungen müssen zusammen erstellt werden (insbesondere wenn man bedenkt, dass nicht symplinierte Betriebssysteme wie Windows Tednessheit hinzufügen können. Dann schlägt das OP weiter vor, wie globale Befehle funktionieren:

Ein "globales", aber isoliertes Projekt kann in ~/.composer/global/[something] installiert werden. oder eine bessere Option könnte ~/.composer/global/[something]/bin sein. Die String ~/.composer/vendor/bin kann auf verschiedene Arten ausgewählt werden. ~/.composer/bin [something] org/project Ich stimme diesem Ansatz voll und ganz zu, es scheint das Beste aus beiden Welten zu sein. Dies kann natürlich zu Problemen mit Rückwärtskompatibilität führen, aber das bedeutet nicht, dass es in Version 2.0 von Composer nicht passieren wird. Taylor Otwell reagiert weiter unten auf diese Ansicht: ~/.composer/global/org/project/vendor/org/project

voll einverstanden. Es wäre erstaunlich, jeden weltweit installierten Komponisten in ein eigenes Quarantäneverzeichnis installieren zu können und über seine eigenen Quarantäne -Abhängigkeiten zu verfügen, anstatt möglicherweise mit anderen global installierten Paketen widersprüchlich zu sein.

Danach baut OP im wahren Open -Source -Geist die alternative globale Implementierung in ein separates Tool auf: CGR. Mal sehen, wie es funktioniert.

CGR - Komponist global erfordern alternative

Ich werde alle folgenden Befehle auf dem Gehöft ausführen, verbesserte Instanz

Um mit CGR zu beginnen, installieren wir es als globales Paket.

Wenn sich der Bin -Ordner des Komponisten nicht in der Pfadvariablen befindet, fügen Sie ihn hinzu:

composer global require consolidation/cgr
Nach dem Login kopieren
Nach dem Login kopieren
Die obigen Befehle verwenden den Pfad des globalen Bin -Verzeichnisses des Komponisten, um die Umgebungsvariablen zu erweitern (der Standardstandort auf Homestead verbessert - Ihr Standort kann unterschiedlich sein). Der zweite Befehl konfiguriert das von CGR verwendete Bin -Verzeichnis, während der dritte Befehl diese Änderungen lädt. Diese werden auch automatisch jedes Mal automatisch geladen, wenn die Terminalschnittstelle als Benutzer ausgeführt wird (in meinem Fall mit Vagrant über

).

echo "export PATH=$PATH:$HOME/.composer/vendor/bin/" >> ~/.bashrc
echo "export CGR_BIN_DIR=$HOME/.composer/vendor/bin" >> ~/.bashrc
source ~/.bashrc
Nach dem Login kopieren
Dann können Sie auf das CGR zugreifen, indem Sie

ausgeführt werden, wodurch die allgemeine Hilfedatei des Komponisten ausgegeben wird. $PATH vagrant ssh Installieren Sie das globale Komponist -Paket

ordnungsgemäß

cgr Auf dem Homestead verbessert wird ein nützlicher Alias ​​konfiguriert, wobei das Tippen

auf

erweitert wird, was bei der Installation

für jedes Projekt sehr bequem ist, sodass Sie es aus dem Stammordner ausführen können. Um die globale Installation von Phpunit zu testen, müssen wir zuerst diesen Alias ​​löschen (kommentieren Sie die entsprechende Zeile in
cgr phpunit/phpunit
Nach dem Login kopieren
), beenden Sie dann die Shell und gehen Sie wieder ein, damit der Alias ​​neu geladen wird. Wenn Sie diese neue globale Installation von Phpunit unter Verwendung der Versionsausgabe ausführen

phpunit Versuchen wir nun, zwei inkompatible Pakete zu installieren. vendor/bin/phpunit phpunit ~/.bash_aliases Natürlich können sie alle normal installiert werden. Überprüfen Sie, ob sie funktionieren.

composer global require consolidation/cgr
Nach dem Login kopieren
Nach dem Login kopieren

Alles läuft gut! Globale Pakete, die bisher aufgrund von Abhängigkeitsfehlanpassung in Konflikt geraten sind, können jetzt nebeneinander nebeneinander existieren und ohne Probleme im gesamten Betriebssystem verwendet werden!

Was sollte/können dieses Tool nicht machen?

In einigen Fällen möchten Sie das Composer -Plugin möglicherweise installieren. Wie im Abschnitt "Beschränkungen" angegeben, sind diese Plugins in allen globalen Projekten weltweit nicht verfügbar, da CGR jedes globale Paket in seinen eigenen Ordner installiert und über einen eigenen Abhängigkeitsbaum verfügt. Wenn Sie also ein Plugin installieren möchten, das das gemeinsame Verhalten des Komponisten ändert, sollten Sie immer noch composer global require anstelle von CGR verwenden. Zum Beispiel ist CGR selbst ein solches Plugin.

Was kommt als nächstes?

testen, testen, testen! Wenn Sie ein häufiger Benutzer des globalen Befehls benötigen, empfehle ich Ihnen dringend, dieses neue Tool zu testen und Greg Anderson ein gewisses Feedback zu geben, wie viel es Ihren globalen Bedürfnissen entspricht und ob Verbesserungen vorhanden sind.

Bitte beachten Sie, dass dieses Tool derzeit nur ein Beweis für das Konzept ist und die Implementierung möglicherweise umbenannt, neu verpackt, schließlich in den Kern des Komponisten integriert und vieles mehr integriert wird. Mit anderen Worten, verwenden Sie es so viel wie möglich, aber verlassen Sie sich vorerst nicht übertrieben.

Während Ihr globales Paket installiert ist, sagen Sie uns, was Sie über composer global require denken? Ist es so schädlich, wie viele Menschen jetzt denken? Oder geht es nur darum, vorsichtig zu sein und ein isoliertes Entwicklungsumfeld zu haben? Was noch? Bitte drücken Sie Ihre Kommentare unten aus!

FAQs über Komponist Global erfordern

Warum wird es als schädlich angesehen, die globale Anforderung des Komponisten zu verwenden?

Die globale Anforderung des

-Komponisten wird als schädlich angesehen, da dies zu Abhängigkeitskonflikten führen kann. Wenn Sie Pakete global installieren, teilen sie alle den gleichen Speicherplatz, was bedeutet, dass sie dieselben Abhängigkeiten teilen. Wenn zwei Pakete unterschiedliche Versionen derselben Abhängigkeiten erfordern, kann dies zu Konflikten und Fehlern führen. Es wird empfohlen, seine eigenen Abhängigkeiten für jedes Projekt zu installieren, um solche Probleme zu vermeiden.

Was ist die Alternative zum Komponisten -Global -Forderung?

Verwenden Sie keine weltweite Anforderung des Komponisten, Sie können für jedes benötigte Tool ein neues Composer -Projekt erstellen. Auf diese Weise hat jedes Tool eine eigene Abhängigkeitszahl, wodurch das Konfliktrisiko verringert wird. Sie können auch Tools wie CGR verwenden, das für jedes Paket isolierte Installationen erstellt und so Probleme mit globaler Abhängigkeit vermeidet.

cgr Wie kann ich helfen, globale Abhängigkeitsprobleme zu vermeiden?

cgr (Composer Global Require) ist ein Tool zum Erstellen von isolierten Installationen für jedes Paket. Dies bedeutet, dass jedes Paket und seine Abhängigkeiten in einem eigenen separaten Verzeichnis installiert werden, wodurch das Risiko von Konflikten zwischen Abhängigkeiten verschiedener Pakete vermieden wird. Dies macht es zu einer sichereren Alternative zur Verwendung von Composer Global Request.

Wie installiere und verwende ich CGR?

Um CGR zu installieren, können Sie den Befehl composer global require consolidation/cgr verwenden. Nach der Installation können Sie CGR verwenden, wie Sie die globale Anforderung des Komponisten verwenden würden. Um ein Paket zu installieren, können Sie den Befehl cgr require package-name verwenden.

Was ist der Unterschied zwischen der lokalen Installation und der globalen Installation im Komponisten?

im Komponisten bedeutet die lokale Installation, dass das Paket und seine Abhängigkeiten im Verzeichnis des Projekts installiert sind. Dies ist die empfohlene Möglichkeit, Pakete zu installieren, da es Abhängigkeitskonflikte vermeidet. Auf der anderen Seite installiert die globale Installation Pakete und ihre Abhängigkeiten in einem globalen Verzeichnis, was zu Konflikten führen kann, wenn verschiedene Pakete unterschiedliche Versionen derselben Abhängigkeiten erfordern.

Wie man globale Abhängigkeiten im Komponisten verwaltet?

Die Verwaltung globaler Abhängigkeiten im Komponisten kann aufgrund des Konfliktrisikos eine Herausforderung sein. Tools wie CGR können jedoch helfen, indem isolierte Installationen für jedes Paket erstellt werden. Sie können auch globale Abhängigkeiten verwalten, indem Sie für jedes erforderliche Tool ein neues Komponist -Projekt erstellen, um sicherzustellen, dass jedes Tool über seine eigenen Abhängigkeiten verfügt.

Kann ich sowohl lokale als auch globale Installationen im Komponisten verwenden?

Ja, Sie können sowohl lokale als auch globale Installationen im Komponisten verwenden. Es wird jedoch empfohlen, nach Möglichkeit eine lokale Installation zu verwenden, um Abhängigkeitskonflikte zu vermeiden. Wenn Sie global Pakete verwenden müssen, sollten Sie Tools wie CGR verwenden, um eine isolierte Installation zu erstellen.

Was sind die Risiken für fälschliche Verwaltung von Abhängigkeiten im Komponisten?

fälschlicherweise Verwaltung von Abhängigkeiten im Komponisten kann zu Konflikten und Fehlern führen. Wenn zwei Pakete die gleichen Abhängigkeiten verschiedener Versionen erfordern, kann dies schwierig zu Debuggs zu Problemen führen. Es kann auch ein unerwartetes Verhalten der Anwendung verursachen, da verschiedene Versionen von Abhängigkeiten unterschiedliche Funktionen und Verhaltensweisen haben können.

Wie kann man Abhängigkeitskonflikte im Komponisten lösen?

Um Abhängigkeitskonflikte im Komponisten zu lösen, können Sie versuchen, das Paket auf die neueste Version zu aktualisieren, da dies den Konflikt beheben kann. Wenn dies nicht funktioniert, möchten Sie möglicherweise das von Ihnen verwendete Paket überdenken und Alternativen finden, die keine widersprüchlichen Abhängigkeiten haben. Tools wie CGR können auch helfen, indem isolierte Installationen für jedes Paket erstellt werden.

Wie kann man Komponistenabhängigkeiten auf dem neuesten Stand halten?

Um die Abhängigkeiten der Komponisten auf dem neuesten Stand zu halten, können Sie den Befehl composer update verwenden. Dies aktualisiert alle Pakete auf der neuesten Version, basierend auf der in der composer.json -Fatei angegebenen Versionsbeschränkung. Sie können auch den Befehl composer outdated verwenden, um zu sehen, welche Pakete für neuere Versionen verfügbar sind.

Das obige ist der detaillierte Inhalt vonKomponist global verlangt als schädlich?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage