Einführung
Composer ist ein beliebtesdependency management-Tool für PHP, das hauptsächlich zur Erleichterung der Installation und Aktualisierung von Projektabhängigkeiten erstellt wurde. Es prüft, von welchen anderen Paketen ein bestimmtes Projekt abhängt, und installiert sie für Sie. Dabei werden die entsprechenden Versionen verwendet, die den Projektanforderungen entsprechen.
In diesem Tutorial wird erklärt, wie Sie Composer auf einem Ubuntu 16.04-System installieren und in Betrieb nehmen.
Voraussetzungen
Für dieses Tutorial benötigen Sie:
-
Ein System mit Ubuntu 16.04
-
Zugriff auf den Server als regulärer Benutzer mitsudo permission
[[Schritt-1 - Installieren der Abhängigkeiten]] == Schritt 1 - Installieren der Abhängigkeiten
Bevor wir Composer herunterladen und installieren, müssen wir sicherstellen, dass auf unserem Server alle Abhängigkeiten installiert sind.
Aktualisieren Sie zuerst den Paketmanager-Cache, indem Sie Folgendes ausführen:
sudo apt-get update
Lassen Sie uns nun die Abhängigkeiten installieren. Wir benötigencurl
, um Composer herunterzuladen, undphp-cli
, um es zu installieren und auszuführen. Dasphp-mbstring
-Paket ist erforderlich, um Funktionen für eine Bibliothek bereitzustellen, die wir verwenden werden. git
wird von Composer zum Herunterladen von Projektabhängigkeiten undunzip
zum Extrahieren von komprimierten Paketen verwendet. Alles kann mit dem folgenden Befehl installiert werden:
sudo apt-get install curl php-cli php-mbstring git unzip
Sie können jetzt mit dem nächsten Schritt fortfahren.
[[Schritt 2 - Herunterladen und Installieren von Composer]] == Schritt 2 - Herunterladen und Installieren von Composer
Composer bietet ein in PHP geschriebenes Installationsprogramm. Stellen Sie sicher, dass Sie sich in Ihrem Home-Verzeichnis befinden, und rufen Sie das Installationsprogramm mitcurl
ab:
cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php
Führen Sie als Nächstes ein kurzes PHP-Skript aus, um zu überprüfen, ob das Installationsprogramm mit dem SHA-384-Hash für das neueste Installationsprogramm auf der SeiteComposer Public Keys / Signaturesübereinstimmt. Sie müssen sicherstellen, dass Sie den hervorgehobenen Wert durch den neuesten Hash ersetzen:
php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Ausgabe
Installer verified
Verwenden Sie Folgendes, umcomposer
global zu installieren:
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
Dadurch wird Composer als systemweiter Befehl mit dem Namencomposer
unter/usr/local/bin
heruntergeladen und installiert. Die Ausgabe sollte folgendermaßen aussehen:
OutputAll settings correct for using Composer
Downloading 1.1.1...
Composer successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer
Führen Sie zum Testen Ihrer Installation Folgendes aus:
composer
Und Sie sollten eine Ausgabe ähnlich der folgenden erhalten:
Output ______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.1.1 2016-05-17 12:25:44
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--profile Display timing and memory usage information
--no-plugins Whether to disable plugins.
. . .
Dies bedeutet, dass Composer erfolgreich auf Ihrem System installiert wurde.
[.note] #Wenn Sie für jedes Projekt, das Sie auf diesem Server hosten, separate ausführbare Composer-Dateien bevorzugen, können Sie diese einfach pro Projekt lokal installieren. Benutzer von NPM sind mit diesem Ansatz vertraut. Diese Methode ist auch nützlich, wenn Ihr Systembenutzer keine Berechtigung zum systemweiten Installieren von Software hat.
#
In diesem Fall kann die Installation durchgeführt werden, nachdem das Installationsskript wie oben beschrieben heruntergeladen und überprüft wurde:
php composer-setup.php
Dadurch wird einecomposer.phar
-Datei in Ihrem aktuellen Verzeichnis generiert, die mit./composer.phar command
ausgeführt werden kann.
[[Schritt-3 - Generieren der Composer-JSON-Datei]] == Schritt 3 - Generieren der Composer.Json-Datei
Um Composer in Ihrem Projekt verwenden zu können, benötigen Sie einecomposer.json
-Datei. Die Dateicomposer.json
teilt Composer im Wesentlichen mit, welche Abhängigkeiten für Ihr Projekt heruntergeladen werden müssen und welche Versionen jedes Pakets installiert werden dürfen. Dies ist äußerst wichtig, damit Ihr Projekt konsistent bleibt und keine instabilen Versionen installiert werden, die möglicherweise Probleme mit der Abwärtskompatibilität verursachen können.
Sie müssen diese Datei nicht manuell erstellen. Dabei können leicht Syntaxfehler auftreten. Composer generiert die Dateicomposer.json
automatisch, wenn Sie Ihrem Projekt mit dem Befehlrequire
eine Abhängigkeit hinzufügen. Auf die gleiche Weise können auch zusätzliche Abhängigkeiten hinzugefügt werden, ohne dass diese Datei manuell bearbeitet werden muss.
Das Installieren eines Pakets mit Composer als Abhängigkeit in einem Projekt umfasst normalerweise die folgenden Schritte:
-
Identifizieren Sie, welche Art von Bibliothek die Anwendung benötigt
-
Suchen Sie inPackagist.org, dem offiziellen Paket-Repository für Composer, nach einer geeigneten Open Source-Bibliothek
-
Wählen Sie das Paket, von dem Sie abhängen möchten
-
Führen Sie
composer require
aus, um die Abhängigkeit in die Dateicomposer.json
aufzunehmen, und installieren Sie das Paket
Wir werden sehen, wie dies in der Praxis mit einer einfachen Demo-Anwendung funktioniert.
Das Ziel dieser Anwendung ist es, einen bestimmten Satz in eine URL-freundliche Zeichenfolge umzuwandeln - aslug. Dies wird häufig zum Konvertieren von Seitentiteln in URL-Pfade verwendet (wie der letzte Teil der URL für dieses Lernprogramm).
Beginnen wir mit der Erstellung eines Verzeichnisses für unser Projekt. Wir nennen esslugify:
cd ~
mkdir slugify
cd slugify
Auf Packagist nach Paketen suchen
Jetzt ist es an der Zeit,Packagist.org nach einem Paket zu durchsuchen, mit dessen Hilfe wirslugs generieren können. Wenn Sie in Packagist nach dem Begriff "Schnecke" suchen, erhalten Sie ein ähnliches Ergebnis:
Auf der rechten Seite jedes Pakets werden in der Liste zwei Zahlen angezeigt. Die Zahl oben gibt an, wie oft das Paket installiert wurde, und die Zahl unten gibt an, wie oft ein Paket auf GitHub mit einem Stern versehen wurde. Sie können die Suchergebnisse anhand dieser Zahlen neu anordnen (suchen Sie nach den beiden Symbolen auf der rechten Seite der Suchleiste). Im Allgemeinen sind Pakete mit mehr Installationen und mehr Sternen stabiler, da sie von so vielen Benutzern verwendet werden. Es ist auch wichtig, die Paketbeschreibung auf Relevanz zu prüfen - ist das wirklich das, wonach Sie suchen?
Was wir brauchen, ist ein einfacher String-to-Slug-Konverter. Aus den Suchergebnissen geht hervor, dass das Paketcocur/slugify
mit einer angemessenen Anzahl von Installationen und Sternen gut übereinstimmt. (Das Paket befindet sich etwas weiter unten auf der Seite, als der Screenshot zeigt.)
Sie werden feststellen, dass die Pakete auf Packagist den Namenvendorund den Namenpackagehaben. Jedes Paket hat eine eindeutige Kennung (einen Namespace) im gleichen Format, das GitHub für seine Repositorys verwendet:vendor/package
. Die Bibliothek, die wir installieren möchten, verwendet den Namespacecocur/slugify
The namespace is what we need in order to require the package in our project.
Paket anfordern
Nachdem wir genau wissen, welches Paket wir installieren möchten, können wircomposer require
ausführen, um es als Abhängigkeit einzuschließen, und auch diecomposer.json
-Datei für das Projekt generieren:
composer require cocur/slugify
OutputUsing version ^2.1 for cocur/slugify
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing cocur/slugify (v2.1.1)
Downloading: 100%
Writing lock file
Generating autoload files
Wie Sie der Ausgabe entnehmen können, hat Composer automatisch entschieden, welche Version des Pakets verwendet werden soll. Wenn Sie jetzt das Verzeichnis Ihres Projekts überprüfen, enthält es zwei neue Dateien:composer.json
undcomposer.lock
und einvendor
Verzeichnis:
ls -l
Outputtotal 12
-rw-rw-r-- 1 sammy sammy 59 May 17 10:24 composer.json
-rw-rw-r-- 1 sammy sammy 2894 May 17 10:24 composer.lock
drwxrwxr-x 4 sammy sammy 4096 May 17 10:24 vendor
In der Dateicomposer.lock
werden Informationen darüber gespeichert, welche Versionen jedes Pakets installiert sind, und es wird sichergestellt, dass dieselben Versionen verwendet werden, wenn jemand anderes Ihr Projekt klont und seine Abhängigkeiten installiert. Im Verzeichnisvendor
befinden sich die Projektabhängigkeiten. Der Ordnervendor
solltenot in die Versionskontrolle übernehmen - Sie müssen nur die Dateiencomposer.json undcomposer.lock einschließen.
[.note] #Wenn Sie ein Projekt installieren, das bereits einecomposer.json
-Datei enthält, müssen Siecomposer install
ausführen, um die Abhängigkeiten des Projekts herunterzuladen.
#
Grundlegendes zu Versionsbeschränkungen
Wenn Sie den Inhalt Ihrercomposer.json
-Datei überprüfen, wird Folgendes angezeigt:
cat composer.json
Output{
"require": {
"cocur/slugify": "^2.1"
}
}
Möglicherweise bemerken Sie das Sonderzeichen^
vor der Versionsnummer incomposer.json
. Composer unterstützt verschiedene Einschränkungen und Formate für die Definition der erforderlichen Paketversion, um Flexibilität zu bieten und gleichzeitig Ihr Projekt stabil zu halten. Der von der automatisch generiertencomposer.json
-Datei verwendete Caret-Operator (^
) ist der empfohlene Operator für maximale Interoperabilität nachsemantic versioning. In diesem Fall definiert es2.1 als die minimal kompatible Version und ermöglicht Aktualisierungen auf zukünftige Versionen unter3.0.
Im Allgemeinen müssen Sie keine Versionsbeschränkungen in dercomposer.json
-Datei ändern. In einigen Situationen ist es jedoch möglicherweise erforderlich, dass Sie die Einschränkungen manuell bearbeiten. Beispielsweise, wenn eine wichtige neue Version Ihrer erforderlichen Bibliothek veröffentlicht wird und Sie ein Upgrade durchführen möchten oder wenn die zu verwendende Bibliothek nicht der semantischen Versionierung folgt.
Im Folgenden finden Sie einige Beispiele, die Ihnen ein besseres Verständnis der Funktionsweise von Composer-Versionsbeschränkungen vermitteln sollen:
Zwang | Bedeutung | Beispielversionen erlaubt |
---|---|---|
^1.0 |
> = 1,0 <2,0 |
1.0, 1.2.3, 1.9.9 |
^ 1.1.0 |
> = 1.1.0 <2.0 |
1.1.0, 1.5.6, 1.9.9 |
~1.0 |
> = 1,0 <2,0,0 |
1.0, 1.4.1, 1.9.9 |
~ 1.0.0 |
> = 1.0.0 <1.1 |
1.0.0, 1.0.4, 1.0.9 |
1.2.1 |
1.2.1 |
1.2.1 |
1.* |
> = 1,0 <2,0 |
1.0.0, 1.4.5, 1.9.9 |
1.2.* |
> = 1,2 <1,3 |
1.2.0, 1.2.3, 1.2.9 |
Lesen Siethe official documentation, um eine detailliertere Ansicht der Composer-Versionsbeschränkungen zu erhalten.
[[Schritt-4 -—- einschließlich-des-Autoload-Skripts]] == Schritt 4 - Einschließlich des Autoload-Skripts
Da PHP das Laden von Klassen nicht automatisch übernimmt, stellt Composer auch ein Autoload-Skript zur Verfügung, das Sie in Ihr Projekt aufnehmen können, um das Autoloading kostenlos zu erhalten. Dies erleichtert die Arbeit mit Abhängigkeiten und das Definieren eigener Namespaces erheblich.
Das einzige, was Sie tun müssen, ist, dievendor/autoload.php
-Datei in Ihre PHP-Skripte aufzunehmen, bevor eine Klasseninstanziierung durchgeführt wird.
Kehren wir zur Beispielanwendung vonslugifyzurück. Wir werdennano
verwenden, um eintest.php
-Skript zu erstellen, in dem wir diecocur/slugify-Bibliothek verwenden:
nano test.php
test.php
slugify('Hello World, this is a long sentence and I need to make a slug from it!');
Sie können das Skript in der Befehlszeile ausführen mit:
php test.php
Dies sollte die Ausgabehello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it
erzeugen.
[[Schritt-5 - Aktualisieren der Projektabhängigkeiten]] == Schritt 5 - Aktualisieren der Projektabhängigkeiten
Wann immer Sie Ihre Projektabhängigkeiten aktualisieren möchten, müssen Sie nur den Befehlupdate
ausführen:
composer update
Dadurch wird nach neueren Versionen der Bibliotheken gesucht, die Sie in Ihrem Projekt benötigen. Wenn eine neuere Version gefunden wird und mit der in der Dateicomposer.json
definierten Versionsbeschränkung kompatibel ist, wird die zuvor installierte Version ersetzt. Die Dateicomposer.lock
wird aktualisiert, um diese Änderungen widerzuspiegeln.
Sie können auch eine oder mehrere bestimmte Bibliotheken aktualisieren, indem Sie Folgendes ausführen:
composer update vendor/package vendor2/package2
Fazit
Dieses Tutorial befasste sich mit den Grundlagen für den Einstieg in Composer unter Ubuntu 16.04. Composer ist ein mächtiges Werkzeug, das jeder PHP-Entwickler in seinem Dienstprogramm haben sollte.
Es bietet nicht nur eine einfache und zuverlässige Möglichkeit zum Verwalten von Projektabhängigkeiten, sondern setzt auch einen neuen De-facto-Standard für das Teilen und Erkennen von PHP-Paketen, die von der Community erstellt wurden.