Compositeur pour les petits

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:

image

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

image

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:

image

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é

image

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.

image

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:

image

Voici un exemple de package composer.json:

image

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.

image

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:

image

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

image

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:

image

Entrez le chemin de l'interprète

image
image

* 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

image

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

image

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/2033
Ajoutez la variable APPDATA avec la valeur D: \ Users \ GSU \ AppData \ Roaming

image

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.

image

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:

image

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:

image

Pqr / superlib - c'est la même "mauvaise" bibliothèque.

Dans la section des référentiels, nous écrivons une telle construction pour cela

image

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:

image

Contenu du fichier:

image
image

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.

image
image
image
image

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

image

Mettez quelques bibliothèques

image
image

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

image

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

image

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.

image

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

image

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

image
image

Compilé par composer.json

image

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

image

Tous les packages ajoutés

image
image

Je vérifie la fonctionnalité du package

image

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

image

Appelez la méthode

image

Tout va bien.

image

Compositeur et PhpStorm


Initialisation

image
image
image
image

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

image

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

image
image
image
image
image

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 compositeur

Vous 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.org

Le 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é

image
image

habrastorage.org/getpro/habr/comment_images/db3/59a/972/db359a972df6730e52f292b5c52095b8.gif

Les références


Hors site: getcomposer.org
Dépôt officiel des paquets: packagist.org
Référentiel du compositeur: github.com/composer/composer
Tutoriel du grand compositeur: daylerees.com/composer-primer
Liste des commandes et un exemple détaillé du fichier composer.json : composer.json.jolicode.com

Source: https://habr.com/ru/post/fr439200/


All Articles