Compositor para los más pequeños.

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:

imagen

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

imagen

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:

imagen

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

imagen

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

imagen

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:

imagen

Este es un ejemplo de paquete composer.json:

imagen

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.

imagen

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:

imagen

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

imagen

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:

imagen

Ingrese la ruta al intérprete

imagen
imagen

* 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

imagen

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

imagen

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/2033
Agregue la variable APPDATA con el valor D: \ Users \ GSU \ AppData \ Roaming

imagen

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.

imagen

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:

imagen

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:

imagen

Pqr / superlib: esta es la misma biblioteca "incorrecta".

En la sección de repositorios, escribimos tal construcción para ello.

imagen

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:

imagen

Contenido del archivo:

imagen
imagen

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.

imagen
imagen
imagen
imagen

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

imagen

Poner algunas bibliotecas

imagen
imagen

Hemos formado composer.json con información del paquete

imagen

Podemos complementarlo y distribuir el proyecto con este archivo.

imagen

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

imagen

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

imagen

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

imagen
imagen

Compilado por composer.json

imagen

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

imagen

Todo el paquete agregado

imagen
imagen

Compruebo la funcionalidad del paquete

imagen

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

imagen

Llamar al método

imagen

Todo esta bien

imagen

Compositor y PhpStorm


Inicialización

imagen
imagen
imagen
imagen

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

imagen

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

Instalación de paquete

imagen
imagen
imagen
imagen
imagen

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 compositor

Tambié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.org

El 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

imagen
imagen

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

Referencias


Fuera del sitio: getcomposer.org
Repositorio oficial de paquetes: packagist.org
Repositorio del compositor: github.com/composer/composer
Tutorial de Great Composer: daylerees.com/composer-primer
Lista de comandos y un ejemplo detallado del archivo composer.json : composer.json.jolicode.com

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


All Articles