Bonne journée
Quand j'ai abordé le compositeur pour la première fois, j'ai esquissé une petite feuille de triche pour moi-même et maintenant, après un certain temps, je la présente au public sous une forme légèrement modifiée.
Cette publication s'adresse à ceux qui, pour la première fois, ont rencontré un gestionnaire de paquets indispensable pour PHP.
Ainsi, Composer est un gestionnaire de packages pour PHP.
À quoi sert Composer et l'exemple le plus simple de son utilisation?
Prenez
ce projet comme exemple.
En bref: il s'agit d'un ensemble de scripts pour travailler dans VK API
En conséquence, pour le fonctionnement de ces scripts, vous avez besoin de plusieurs bibliothèques
Les bibliothèques sont répertoriées dans le fichier composer.json - un fichier clé lorsque vous travaillez avec composer
Exemple composer.json:

Ce projet utilise 5 bibliothèques. En conséquence, si le développeur décide de publier ce projet sur github, il lui suffit de déposer le dossier de script dans le navet et de composer composer.json, qui décrira les bibliothèques nécessaires au fonctionnement de ce projet. La simplicité est évidente: dans les navets, vous n'avez pas besoin de faire glisser toutes les bibliothèques nécessaires avec la bande-annonce après les fichiers. Il prend moins de place, il est plus facile de distribuer le projet.
Exemple de travail:
Téléchargez le projet

Dans le dossier scripts se trouvent directement les scripts du projet, pour lesquels ces 5 packages sont requis.
Nous commençons l'installation des packages:

Après l'installation, le dossier du fournisseur apparaît, où les packages installés sont ajoutés et le fichier autoload.php est formé

Nous connectons ce fichier au projet et c'est tout - les bibliothèques sont connectées, vous pouvez travailler en toute sécurité avec elles.

La simplicité est évidente: vous n'avez pas besoin de télécharger et de connecter vous-même les bibliothèques et leurs dépendances, composer fera tout pour vous. Et cet ensemble est connecté à un seul fichier autoload.php
Tous les packages du fournisseur sont ajoutés au chargeur automatique. Pour ce faire, composer s'appuie sur les fichiers composer.json, que chaque package doit avoir. La formation d'un package composer.json est la tâche du développeur du package; le consommateur du package n'a qu'à décrire dans le projet composer.json quels packages doivent être connectés.
Voici un exemple de projet composer.json:

Voici un exemple de package composer.json:

Dans la section require, la dépendance de ce package est enregistrée - la bibliothèque http guzzle, qui est nécessaire au fonctionnement de la bibliothèque getjump / vk. Dans ce cas, c'est-à-dire du point de vue du consommateur de packages, toutes sortes de dépendances de packages ne sont pas notre «préoccupation», composer composera les dépendances lui-même.
L'espace de noms du package est enregistré dans la section de chargement automatique.

getjump \\ Vk \\ - nom de l'espace de noms
src / getjump / Vk / - le répertoire où se trouvent les fichiers avec les classes de packages
Travaillez avec cette bibliothèque dans le projet:

Core et Friends sont des classes de bibliothèque qui sont présentées et enregistrées dans le dossier src conformément à la norme PSR-4. Encore une fois, la mise en forme de la structure du package incombe au créateur du package.
Il nous suffit, en tant que consommateur du package, de nous inscrire à notre projet
include '../vendor/autoload.php';
et toutes ces classes et espaces de noms fonctionneront très bien.
Dans ce cas, nous n'avons pas besoin de déranger et d'écrire un chargeur automatique. Composer le fera lui-même lors de l'exécution de la commande d'installation.
L'installation
Installer Composer à l'échelle mondiale
1) Vous devez d'abord enregistrer le chemin du répertoire avec l'interpréteur PHP dans le chemin de la variable d'environnement.
Vérifiez si c'est le cas:
php –version

Si la conclusion est la suivante, vous pouvez ignorer cette étape
Par exemple, Windows 7
Système -> Paramètres système avancés -> Avancé -> Variables d'environnement
Ensuite, nous nous intéresserons à la variable path:

Entrez le chemin de l'interprète


* Depuis l'Antiquité, j'ai l'assembly xampp sur mon ordinateur, l'assembly lui-même n'est pas nécessaire ici, mais son interpréteur est tout à fait approprié (PHP version - 5.6).
2) Redémarrez le terminal.
Créer un répertoire et installer le compositeur (je mets sur le disque D)
D:
cd /
mkdir bin
cd bin
php -r "readfile ('https://getcomposer.org/installer');" | php
echo
php "% ~ dp0composer.phar"% *> composer.bat

3) Ajoutez le chemin d'accès à composer.bat au chemin de la variable d'environnement, par exemple pour D: \ bin, cela devrait fonctionner:

Peut également être ajouté au chemin
D: \ Users \% userName% \ AppData \ Roaming \ Composer \ vendor \ bin \
afin de rendre plus pratique l'utilisation d'outils installés globalement via Composer.
(J'ai le dossier Utilisateurs situé sur le lecteur D, et un lien symbolique a été créé sur C pour cela).
Voilà, le compositeur est installé et prêt à l'emploi.
Un autre: lors de l'installation, vous pouvez attraper une erreur
[RuntimeException]
La variable d'environnement APPDATA ou COMPOSER_HOME doit être définie pour que Composer s'exécute correctement
La solution a été trouvée ici
github.com/composer/composer/issues/2033Ajoutez la variable APPDATA avec la valeur D: \ Users \ GSU \ AppData \ Roaming

Installer Composer localement
Il existe une option pour installer le compositeur localement, mais dans la plupart des cas, il n'y a pas de besoin évident pour cela.
Cependant, l'installation est encore plus simple ici.
Parce que le programme n'est pas installé globalement, vous avez besoin d'un fichier de démarrage (compositeur mini-programme), pour le charger nous écrivons la commande:
php -r "readfile ('https://getcomposer.org/installer');" | php
maintenant le fichier composer.phar est apparu dans le répertoire du projet
Tout peut être utilisé.
php composer.phar requiert [nom du package]
Différences entre l'installation globale et l'installation locale
Les commandes s'exécutent différemment pour les installations locales et globales:
Par exemple:
Localement: php composer.phar nécessite silex / silex ~ 1.1
Globalement: le compositeur a besoin de silex / silex ~ 1.1
Lors de l'installation locale, vous devez télécharger le fichier d'installation dans le dossier du projet actuel à chaque fois
php -r "readfile ('https://getcomposer.org/installer');" | php
Dans une installation globale, ce fichier n'est pas nécessaire. Composer démarre dans n'importe quel répertoire en cours.
Équipes
install - installe les packages prescrits dans composer.json
update - mise à jour des packages
dumpautoload - reconstruction du chargeur automatique
require somepackage / somepackage: someversion - ajoute un nouveau package (par défaut, les packages sont installés à partir du référentiel officiel). Lors de l'installation, le package est écrit dans composer.json
update --lock - met à jour le fichier de verrouillage composer.lock
config --global cache-files-maxsize "2048MiB" - exemple de modification d'un paramètre de configuration
--profile - l'ajout de ce paramètre à n'importe quelle commande permettra d'afficher le temps d'exécution et la quantité de mémoire utilisée
--verbose - informations détaillées sur l'opération en cours
show --installed - une liste des packages installés avec une description de chacun
show --platform - Informations PHP
--dry-run - répétition de l'exécution de la commande. Il peut être ajouté pour installer et mettre à jour les commandes. Émule l'exécution d'une commande sans l'exécuter directement. Il est nécessaire pour vérifier si l'installation des packages et des dépendances est réussie.
supprimer - supprimer le package. Exact opposé de require
Syntaxe composer.json
Options de dénomination et de description des packages
Le nom du package se compose de deux parties séparées par une barre oblique: le nom du fournisseur et le nom de la bibliothèque.

Si le package est conçu conformément à la norme PSR-4, mais n'est pas publié sur packagist.org, mais sur github, alors au lieu de la version du package, vous devez enregistrer une branche et un référentiel pour ce package:

Un exemple de connexion d'une bibliothèque qui se trouve sur github, mais qui n'est pas encadrée par la norme PSR-4, mais est une pile ordinaire de fichiers avec des classes et des fonctions.
Exemple de vue:

Pqr / superlib - c'est la même "mauvaise" bibliothèque.
Dans la section des référentiels, nous écrivons une telle construction pour cela

Le point clé est la section de chargement automatique, ici nous spécifions les fichiers dont nous avons besoin avec les classes et les fonctions.
Structure de la bibliothèque:

Contenu du fichier:


Par conséquent, dans le projet, l'appel à getCurrentTime () ressemblera à ceci:
$ timer = new pqr \ superlib \ TimerClass;
echo $ timer-> getCurrentTime ();
Versioning
Lorsque vous spécifiez des versions de package valides, vous pouvez utiliser la correspondance exacte (1.2.3), les plages avec les opérateurs de comparaison (<1.2.3), les combinaisons de ces opérateurs (> 1.2.3 <1.3), la «dernière disponible» (1.2. *), Le symbole Tilde (~ 1.2.3) et la marque d'insertion (^ 1.2.3).
L'indication du tilde (~ 1.2.3) inclura toutes les versions jusqu'à 1.3 (non inclus), car dans le versioning sémantique c'est le moment d'introduire de nouvelles fonctionnalités. Dans ce cas, la dernière des versions mineures stables sera obtenue. C'est-à-dire Seul le dernier chiffre changera - 1.2.5, 1.2.8, etc.
L'indication d'un signe d'insertion (^ 1.2.3) signifie littéralement «méfiez-vous des changements critiques uniquement» et inclura les versions jusqu'à 2.0. En ce qui concerne le versionnage sémantique, un changement dans la version principale est le moment d'apporter des changements critiques au projet, donc les versions 1.3, 1.4 et 1.9 conviennent, tandis que 2.0 n'est plus là.
C'est-à-dire seul le premier chiffre ne change pas.
Tilda: ~ 1.2.3 est le moyen le plus courant et le plus sûr de spécifier une version.
Fichier composer.lock
Le fichier composer.lock enregistre la liste actuelle des dépendances installées et leurs versions. Ainsi, au moment où les versions de dépendances sont déjà mises à jour (commande update), les autres personnes qui cloneront votre projet recevront les mêmes versions. Cela vous permet de vous assurer que tous ceux qui reçoivent votre projet ont un environnement de traitement par lots identique à celui que vous avez utilisé pendant le développement, et vous aide à éviter les erreurs qui pourraient survenir en raison des mises à niveau de version.
Chaque fois que la commande update est exécutée, les versions des packages mis à jour sont enregistrées dans composer.lock. Ce fichier est poussé sous le système de contrôle de version et lors de l'installation des packages sur le nouveau serveur, les versions des packages enregistrés dans ce fichier seront livrées. Lors de l'exécution de la commande d'installation, composer s'appuiera principalement sur composer.lock. Ainsi, le même environnement de package en termes de versions sera garanti d'être installé sur différents serveurs.
En outre, le fichier composer.lock contient un hachage du fichier composer.json.
Et si le fichier json a été modifié, composer vous avertira que le fichier de verrouillage ne correspond pas au fichier json.
Dans ce cas, vous devez exécuter la commande composer update --lock, qui mettra à jour composer.lock.




La différence entre l'installation et la mise à jour dans le contexte de l'utilisation de composer.lock
La commande d'
installation de composer effectue les opérations suivantes:
Vérifie si composer.lock existe:
- sinon, résout les dépendances et les crée
- si composer.lock existe, installe les versions qui y sont spécifiées
Commande de
mise à jour du compositeur :
- Vérifie composer.json
- Détermine les dernières versions en fonction de celles spécifiées dans ce fichier
- Installe les dernières versions
- Met à jour composer.lock en fonction de l'installation
Exemple d'utilisation du point de vue du créateur du projet
Il y a un projet sans packages installés

Mettez quelques bibliothèques


Nous avons formé composer.json avec les informations sur le package

Nous pouvons le compléter et diffuser le projet avec ce fichier.

Un autre utilisateur a téléchargé notre projet, exécuté l'installation et tous les packages nécessaires ont été déployés dans son projet.

Exemple d'utilisation du point de vue du créateur du package
Par exemple, j'ai créé une classe avec une méthode qui affichera l'URL de la page en cours

La classe est conçue comme un package et téléchargée sur github.


Compilé par composer.json

Je m'inscris au bureau. référentiels et ajouter un package, indiquant un lien vers le référentiel dans lequel il se trouve

Tous les packages ajoutés


Je vérifie la fonctionnalité du package

Le colis a été livré, voici notre classe:

Appelez la méthode

Tout va bien.

Compositeur et PhpStorm
Initialisation




Configuration des capacités d'édition du package Composer

Si l'option est définie, il ne sera pas si facile de prendre et de modifier des fichiers dans le fournisseur / * / *
Installation du package





Nuances, subtilités, situations difficiles
Erreur: avertissement: le fichier de verrouillage n'est pas à jour avec les dernières modifications de composer.json. Vous obtenez peut-être des dépendances obsolètes. Exécutez la mise à jour pour les mettre à jour. Rien à installer ou à mettre à jour
Solution: mise à jour du compositeur --lock
La mise à jour prend beaucoup de temps avec un grand nombre de bibliothèques installées
Composer vérifie toutes les dépendances des packages, et s'il existe de nombreux packages, ce sera long.
Solution: si vous devez mettre à jour une seule bibliothèque, spécifiez-la explicitement:
package / nom de mise à jour du compositeurVous pouvez également ajouter le paramètre "--prefer-dist" (bien que, en théorie, il devrait être activé par défaut), alors composer essaiera d'installer la bibliothèque à partir de l'archive zip, plutôt que de cloner le référentiel.
Le fichier "****. Json" n'a pas pu être téléchargé: impossible d'ouvrir le flux: la requête HTTP a échoué!
Le compositeur essaie de tirer le paquet sur HTTP, bien qu'il doive sur HTTPS
Solution: composeur config --global repo.packagist composer
packagist.orgLe package n'est pas disponible dans une version suffisamment stable selon votre paramètre de stabilité minimale
voir pour plus de détails.
Le paquet n'a pas de version stable, et l'installation de la version dev n'est pas autorisée dans la configuration.
Solution: définissez le paramètre «minimum-stabilité»: «dev» et «prefer-stable»: true pour définir des versions stables autant que possible, ou - si c'est votre propre package - créez une balise avec la version (l'autocollant stable dans le fichier Lisez-moi sur github devrait montrer la version)
Historique du développement et des changements clés
- la première version a eu lieu le 1er mars 2012 et l'ensemble de l'outil 2012 se développe activement
- Janvier 2014 - implémentation du chargement automatique basé sur PSR-4
- Mars 2016 - la version bêta (1.0.0-beta1) est sortie. Ajout de commandes show --tree pour afficher les packages installés dans une arborescence, pourquoi - montre pourquoi il est impossible d'installer un package, la mise à jour --interactive - vous permet de choisir les packages à mettre à jour, ainsi que de nombreuses autres améliorations et correctifs.
- 4 avril 2016 - la première version stable de Composer a été introduite - 1.0.0
Décembre 2014 - l'une des clés s'engage dans le référentiel du compositeur
github.com/composer/composer/commit/ac676f47f7bbc619678a29deae097b6b0710b799
L'essence du changement - le ramasse-miettes désactivé

habrastorage.org/getpro/habr/comment_images/db3/59a/972/db359a972df6730e52f292b5c52095b8.gifLes références
Hors site: getcomposer.org
Dépôt officiel des paquets: packagist.org
Référentiel du compositeur:
github.com/composer/composerTutoriel du grand compositeur:
daylerees.com/composer-primerListe des commandes et un exemple détaillé du fichier
composer.json :
composer.json.jolicode.com