Buen dia
Cuando descubrí por primera vez al compositor, dibujé una pequeña hoja de trucos para mí y ahora, después de un tiempo, la presento al público en una forma ligeramente modificada.
Esta publicación es relevante para aquellos que, por primera vez, se han encontrado con un administrador de paquetes indispensable para PHP.
Entonces, Composer es un administrador de paquetes para PHP.
¿Para qué es Composer y el ejemplo más simple de su uso?
Toma
este proyecto como ejemplo.
En pocas palabras: este es un conjunto de scripts para trabajar en la API de VK
En consecuencia, para el funcionamiento de estos scripts necesita varias bibliotecas.
Las bibliotecas se enumeran en el archivo composer.json, un archivo clave cuando se trabaja con compositor
Ejemplo composer.json:

Este proyecto utiliza 5 bibliotecas. En consecuencia, si un desarrollador decide publicar este proyecto en github, solo necesita soltar la carpeta del script en el nabo y componer composer.json, que describirá las bibliotecas necesarias para que este proyecto funcione. La simplicidad es obvia: en los nabos, no es necesario arrastrar todas las bibliotecas necesarias con el avance después de los archivos. Ocupa menos espacio, es más fácil distribuir el proyecto.
Ejemplo de trabajo:
Descargar el proyecto

En la carpeta de scripts se encuentran directamente los scripts del proyecto, para los cuales se requieren estos 5 paquetes.
Comenzamos la instalación de paquetes:

Después de la instalación, aparece la carpeta del proveedor, donde se agregan los paquetes instalados y se forma el archivo autoload.php

Conectamos este archivo al proyecto y listo: las bibliotecas están conectadas, puede trabajar de forma segura con ellas.

La simplicidad es obvia: no necesita descargar y conectar las bibliotecas y sus dependencias usted mismo, el compositor hará todo por usted. Y todo este paquete está conectado con un solo archivo autoload.php
Todos los paquetes que están en el proveedor se agregan al autocargador. Al hacerlo, composer se basa en los archivos composer.json, que todos los paquetes deberían tener. La formación de un paquete composer.json es tarea del desarrollador del paquete; el consumidor del paquete solo necesita describir en el proyecto composer.json qué paquetes deben conectarse.
Este es un ejemplo del proyecto composer.json:

Este es un ejemplo de paquete composer.json:

En la sección de requisitos, se registra la dependencia de este paquete: la biblioteca http guzzle, necesaria para que funcione la biblioteca getjump / vk. En este caso, es decir desde el punto de vista del consumidor de paquetes, todo tipo de dependencias de paquetes no son nuestra "preocupación", el compositor descubrirá las dependencias en sí.
El espacio de nombres del paquete está registrado en la sección de carga automática.

getjump \\ Vk \\ - nombre del espacio de nombres
src / getjump / Vk / - el directorio donde se encuentran los archivos con las clases de paquete
Trabaja con esta biblioteca en el proyecto:

Core y Friends son clases de biblioteca que se presentan y registran en la carpeta src de acuerdo con el estándar PSR-4. Nuevamente, dar forma a la estructura del paquete es el trabajo del creador del paquete.
Es suficiente para nosotros, como consumidores del paquete, registrarnos en nuestro proyecto
incluir '../vendor/autoload.php';
y todas estas clases y espacios de nombres funcionarán bien.
En este caso, no necesitamos molestarnos y escribir un autocargador. Composer lo hará por sí mismo cuando ejecute el comando de instalación.
Instalación
Instalar Composer globalmente
1) Primero necesita que la ruta al directorio con el intérprete PHP se registre en la ruta de la variable de entorno.
Comprueba si esto es así:
php –version

Si la conclusión es así, puede omitir este paso
Por ejemplo, Windows 7
Sistema -> Configuración avanzada del sistema -> Avanzado -> Variables de entorno
A continuación, nos interesará la variable de ruta:

Ingrese la ruta al intérprete


* Desde la antigüedad, tengo el ensamblado xampp en mi computadora, el ensamblaje en sí no es necesario aquí, pero el intérprete es bastante adecuado (versión PHP - 5.6).
2) Reinicie el terminal.
Crea un directorio e instala el compositor (lo puse en el disco D)
D:
cd /
mkdir bin
cd bin
php -r "readfile ('https://getcomposer.org/installer');" El | php
echo
php "% ~ dp0composer.phar"% *> composer.bat

3) Agregue la ruta a composer.bat a la ruta de la variable de entorno, por ejemplo para D: \ bin, debería funcionar:

Además se puede agregar a la ruta
D: \ Users \% userName% \ AppData \ Roaming \ Composer \ vendor \ bin \
para que sea más conveniente utilizar herramientas instaladas globalmente a través de Composer.
(Tengo la carpeta Usuarios ubicada en la unidad D, y se creó un enlace simbólico en C para ello).
Eso es todo, el compositor está instalado y listo para funcionar.
Otro: durante la instalación, puede detectar un error
[RuntimeException]
La variable de entorno APPDATA o COMPOSER_HOME debe establecerse para que el compositor se ejecute correctamente
La solución se encontró aquí
github.com/composer/composer/issues/2033Agregue la variable APPDATA con el valor D: \ Users \ GSU \ AppData \ Roaming

Instalar Composer localmente
Hay una opción para instalar el compositor localmente, pero en la mayoría de los casos no hay una necesidad obvia de esto.
Sin embargo, la instalación es aún más simple aquí.
Porque el programa no está instalado globalmente, necesita un archivo de arranque (mini programa compositor), para cargarlo escribimos el comando:
php -r "readfile ('https://getcomposer.org/installer');" El | php
ahora el archivo composer.phar ha aparecido en el directorio del proyecto
Todo se puede usar.
php composer.phar require [nombre del paquete]
Diferencias entre instalación global y local
Los comandos se ejecutan de manera diferente para instalaciones locales y globales:
Por ejemplo:
Localmente: php composer.phar requiere silex / silex ~ 1.1
Globalmente: el compositor requiere silex / silex ~ 1.1
Al instalar localmente, debe descargar el archivo de instalación a la carpeta del proyecto actual cada vez
php -r "readfile ('https://getcomposer.org/installer');" El | php
En una instalación global, este archivo no es necesario. Composer comienza en cualquier directorio actual.
Equipos
install: instala los paquetes prescritos en composer.json
actualización: paquetes de actualización
dumpautoload - reconstrucción del autocargador
require somepackage / somepackage: someversion: agrega un nuevo paquete (de forma predeterminada, los paquetes se instalan desde el repositorio oficial). Durante la instalación, el paquete se escribe en composer.json
update --lock - actualiza el archivo de bloqueo composer.lock
config --global cache-files-maxsize "2048MiB" - ejemplo de cambio de un parámetro de configuración
--perfil - agregar este parámetro a cualquier comando habilitará la visualización del tiempo de ejecución y la cantidad de memoria utilizada
--verbose - información detallada sobre la operación que se realiza
show --installed - una lista de paquetes instalados con una descripción de cada
show --platform - información PHP
--dry-run - ensayo de ejecución de comando. Se puede agregar para instalar y actualizar comandos. Emula la ejecución de un comando sin ejecutarlo directamente. Es necesario para verificar si la instalación de paquetes y dependencias es exitosa.
eliminar: eliminar el paquete. Exactamente opuesto de requerir
Sintaxis composer.json
Nombre del paquete y opciones de descripción del paquete
El nombre del paquete consta de dos partes separadas por una barra: el nombre del proveedor y el nombre de la biblioteca.

Si el paquete está diseñado de acuerdo con el estándar PSR-4, pero no está publicado en packagist.org, sino en github, entonces, en lugar de la versión del paquete, debe registrar una rama y un repositorio para este paquete:

Un ejemplo de conexión de una biblioteca que se encuentra en github, pero no está enmarcada por el estándar PSR-4, sino que es una pila normal de archivos con clases y funciones.
Vista de muestra:

Pqr / superlib: esta es la misma biblioteca "incorrecta".
En la sección de repositorios, escribimos tal construcción para ello.

El punto clave es la sección de carga automática, aquí especificamos los archivos que necesitamos con clases y funciones.
Estructura de la biblioteca:

Contenido del archivo:


En consecuencia, en el proyecto, la llamada a getCurrentTime () se verá así:
$ timer = nuevo pqr \ superlib \ TimerClass;
echo $ timer-> getCurrentTime ();
Versionado
Al especificar versiones válidas de paquetes, puede usar correspondencia exacta (1.2.3), rangos con operadores de comparación (<1.2.3), combinaciones de estos operadores (> 1.2.3 <1.3), "último disponible" (1.2. *), Símbolo de Tilde (~ 1.2.3) y la marca de inserción (^ 1.2.3).
La indicación de la tilde (~ 1.2.3) incluirá todas las versiones hasta la 1.3 (no incluida), ya que en las versiones semánticas este es el momento de introducir una nueva funcionalidad. En este caso, se obtendrá la última de las versiones menores estables. Es decir Solo cambiará el último dígito: 1.2.5, 1.2.8, etc.
La indicación de un signo de inserción (^ 1.2.3) significa literalmente "cuidado con los cambios críticos solamente" e incluirá versiones hasta 2.0. Con respecto a las versiones semánticas, un cambio en la versión principal es el momento de realizar cambios críticos en el proyecto, por lo que las versiones 1.3, 1.4 y 1.9 son adecuadas, mientras que 2.0 ya no existe.
Es decir solo el primer dígito no cambia.
Tilda: ~ 1.2.3 es la forma más común y segura de especificar una versión.
Archivo composer.lock
El archivo composer.lock guarda la lista actual de dependencias instaladas y sus versiones. Por lo tanto, en el momento en que las versiones de dependencia ya estén actualizadas (comando de actualización), otras personas que clonarán su proyecto recibirán las mismas versiones. Esto le permite asegurarse de que todos los que reciben su proyecto tengan un entorno por lotes idéntico al que utilizó durante el desarrollo, y ayuda a evitar errores que puedan surgir debido a las actualizaciones de la versión.
Cada vez que se ejecuta el comando de actualización, las versiones de los paquetes actualizados se registran en composer.lock. Este archivo se inserta en el sistema de control de versiones y, al instalar paquetes en el nuevo servidor, se entregarán las versiones de los paquetes registrados en este archivo. Al ejecutar el comando de instalación, composer se basará principalmente en composer.lock. Por lo tanto, se garantizará la instalación del mismo entorno de paquete en términos de versiones en diferentes servidores.
Además, el archivo composer.lock contiene un hash del archivo composer.json.
Y si el archivo json ha sido editado, el compositor le advertirá que el archivo de bloqueo no coincide con el archivo json.
En este caso, debe ejecutar el comando composer update --lock, que actualiza composer.lock.




La diferencia entre instalar y actualizar en el contexto del uso de composer.lock
El comando de
instalación del compositor hace lo siguiente:
Comprueba si existe composer.lock:
- si no, resuelve las dependencias y lo crea
- si existe composer.lock, instala las versiones especificadas en él
Comando de
actualización del compositor :
- Comprueba composer.json
- Determina las últimas versiones basadas en las especificadas en este archivo
- Instala las últimas versiones
- Actualiza composer.lock de acuerdo con lo instalado
Ejemplo de uso desde el punto de vista del creador del proyecto.
Hay un proyecto sin paquetes instalados

Poner algunas bibliotecas


Hemos formado composer.json con información del paquete

Podemos complementarlo y distribuir el proyecto con este archivo.

Otro usuario descargó nuestro proyecto, ejecutó la instalación y todos los paquetes necesarios se implementaron en su proyecto.

Ejemplo de uso desde la perspectiva del creador del paquete
Por ejemplo, creé una clase con un método que mostrará la URL de la página actual

La clase está diseñada como un paquete y cargada en github.


Compilado por composer.json

Me registro en la oficina. repositorios y agregar un paquete, indicando un enlace al repositorio en el que se encuentra

Todo el paquete agregado


Compruebo la funcionalidad del paquete

El paquete fue entregado, aquí está nuestra clase:

Llamar al método

Todo esta bien

Compositor y PhpStorm
Inicialización




Configuración de las capacidades de edición de paquetes de Composer

Si la opción está configurada, no será tan fácil tomar y editar archivos dentro del proveedor / * / *
Instalación de paquete





Matices, sutilezas, situaciones difíciles.
Error: Advertencia: el archivo de bloqueo no está actualizado con los últimos cambios en composer.json. Puede estar recibiendo dependencias desactualizadas. Ejecute la actualización para actualizarlos. Nada que instalar o actualizar
Solución: actualización del compositor --lock
La actualización lleva mucho tiempo con una gran cantidad de bibliotecas instaladas
Composer verifica todas las dependencias de los paquetes, y si hay muchos paquetes, esto será mucho tiempo.
Solución: si necesita actualizar solo una biblioteca, especifíquela explícitamente:
paquete / nombre de actualización del compositorTambién puede agregar el parámetro "--prefer-dist" (aunque, en teoría, debería estar activado de manera predeterminada), el compositor intentará instalar la biblioteca desde el archivo zip, en lugar de clonar el repositorio.
No se pudo descargar el archivo "****. Json": no se pudo abrir la secuencia: ¡la solicitud HTTP falló!
Composer está intentando extraer el paquete a través de HTTP, aunque necesita hacerlo a través de HTTPS
Solución: configuración del compositor - global repo.packagist composer
packagist.orgEl paquete no está disponible en una versión suficientemente estable de acuerdo con su configuración de estabilidad mínima
ver para más detalles.
El paquete no tiene una versión estable, y la instalación de la versión de desarrollo no está permitida en la configuración.
Solución: establezca el parámetro “estabilidad mínima”: “dev” y “prefiera estable”: verdadero para establecer versiones estables como sea posible o, si este es su propio paquete, cree una etiqueta con la versión (la etiqueta estable en el archivo Léame en github debería mostrar versión)
Historia del desarrollo y cambios clave.
- el primer lanzamiento tuvo lugar el 1 de marzo de 2012 y toda la herramienta de 2012 se está desarrollando activamente
- Enero de 2014: implementación de carga automática basada en PSR-4
- Marzo de 2016: se lanzó la versión beta (1.0.0-beta1). Se agregaron los comandos show --tree para mostrar los paquetes instalados en un árbol, por qué no, muestra por qué es imposible instalar un paquete, la actualización --interactiva - le permite elegir qué paquetes actualizar, así como muchas otras mejoras y correcciones.
- 4 de abril de 2016 - se introdujo la primera versión estable de Composer - 1.0.0
Diciembre de 2014: uno de los compromisos clave para el repositorio de compositores
github.com/composer/composer/commit/ac676f47f7bbc619678a29deae097b6b0710b799
La esencia del cambio: recolector de basura deshabilitado

habrastorage.org/getpro/habr/comment_images/db3/59a/972/db359a972df6730e52f292b5c52095b8.gifReferencias
Fuera del sitio: getcomposer.org
Repositorio oficial de paquetes: packagist.org
Repositorio del compositor:
github.com/composer/composerTutorial de Great Composer:
daylerees.com/composer-primerLista de comandos y un ejemplo detallado del archivo
composer.json :
composer.json.jolicode.com