Composer / el Dependency Manager de PHP
Antes que nada pido disculpas a quienes hayan leído este post antes del 8-9-21, ya que tenía conceptos errados y el tema tocado estaba algo difícil de leer y definía a Composer como un gestor de paquetes en vez de un gestor de dependencias.
Package Manager – es usado para configurar el sistema, es decir, configurar el entorno de desarrollo y con este crear múltiples proyectos.
Un ejemplo de Package manager es Chocolatey para Windows, o Hombrew para Mac, en Linux tenemos una gran variedad, así que nombraré algunos Synaptic, RPM, YUM.
Dependency Manager – es específico al proyecto, gestionas las dependencias para ese proyecto y estas serán guardadas en ese proyecto. Cuando creas un proyecto nuevo debes gestionar las dependencias que tendrá ese proyecto desde 0.
¿Qué es Composer?
https://blastcoding.com/que-es-composer/#que_es_composerComo dije en la versión en inglés es mejor dejar a los creadores que definan lo que es Composer
Composer is a tool for dependency management in PHP. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you.
https://getcomposer.org/
En español sería: Composer es una herramienta para gestionar las dependencias en PHP. Nos permite declarar las librerías en las cuales dependerá tu proyecto y se encargara de la instalación o actualización de estas por ti.
¿Que es una dependencia?
https://blastcoding.com/que-es-composer/#dependenciaEs una aplicación o librería echa por terceros o nuestra, la cual podemos agregar con composer.
Veamos un ejemplo práctico, digamos que nuestro proyecto usara PHPMailer por ejemplo y dbal esto lo podemos gestionar con composer. Es por eso que es interesante, además de que no estamos copiando y pegando nosotros mismos partes de librerías para que funcione. Con composer todo va a parar a una carpeta llamada vendor la cual tendrá lo necesario para que corran estos módulos.
[ADS_A1/]Instalación.
https://blastcoding.com/que-es-composer/#instalacionWindows
Para instalar composer en Windows es muy sencillo, hay que bajar el archivo de instalación Setup.exe y ejecutarlo. El instalador bajará, composer y definirá una variable que contendrá el valor de la ruta del entorno, lo que nos permitira llamarlo con el comando composer
desde cualquer dirección.
Utilizando Chocolatey
Otra manera de instalar composer en Windows es utilizar Chocolatey esto lo puedes hacer con el comando
choco install composer
También puedes instalar composer atravez de su GUI
Si no posees chocolatey puedes ver como instalarlo aquí: Chocolatey un Package Manager para Windows
Linux-UNIX-OSX
para instalarlo en Linux se utiliza la línea de comandos. Dependiendo de como se quiera instalar son los pasos que se deben seguir, hay 2 maneras de instalarlo.
La primera opción es localmente: para instalarlo localmente solo se debe correr los comandos mostrados en esta página https://getcomposer.org/download/ en consola estando en directorio de nuestro proyecto.
Esto nos bajará un archivo llamado composer.phar en nuestro directorio, luego lo corremos con el comando
php composer.phar
La segunda opción es globalmente: puede correr los comandos donde sea y luego mover el archivo .phar al directorio /usr/local/bin/composer con el comando:
Correr donde esta composer.pharmv composer.phar /usr/local/bin/composer
Ya luego puede correrlo con el comando composer tenga en cuenta que debe usar el comando sudo en algunos sistemas operativos.
Puede saber qué comandos puede usar con composer con el comando
composer list
Recuerde globalmente usa composer
y el nombre del comando localmente php composer.phar
y el nombre de este.
¿Cómo se usa?
https://blastcoding.com/que-es-composer/#como_se_usaLo primero que necesitamos es un archivo composer.json en nuestro proyecto, este archivo describe las dependencias de nuestro proyecto y otras clases de información (metadata) que puede ser por ejemplo licencia, autor, versión, descripción, soporte, etc.
El siguiente es un ejemplo del composer.json de Laravel
(carpeta de pryecto)/composer.json{ "name": "laravel/laravel", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "type": "project", "require": { "php": ">=5.6.4", "laravel/framework": "5.4.*", "laravel/tinker": "~1.0" }, "require-dev": { "fzaninotto/faker": "~1.4", "mockery/mockery": "0.9.*", "phpunit/phpunit": "~5.7" }, "autoload": { "classmap": [ "database" ], "psr-4": { "App\\": "app/" } }, "autoload-dev": { "psr-4": { "Tests\\": "tests/" } }, "scripts": { "post-root-package-install": [ "php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ "php artisan key:generate" ], "post-install-cmd": [ "Illuminate\\Foundation\\ComposerScripts::postInstall", "php artisan optimize" ], "post-update-cmd": [ "Illuminate\\Foundation\\ComposerScripts::postUpdate", "php artisan optimize" ] }, "config": { "preferred-install": "dist", "sort-packages": true } }
Con require estamos diciendo que paquetes son los que requiere nuestro proyecto, luego de definir cuáles requiere podemos correr el comando.
(carpeta de proyecto)php composer.phar install
De este modo instalaremos todas las dependencias que pusimos como requeridas en require.
Buscando paquetes para nuestro proyecto
https://blastcoding.com/que-es-composer/#paquetes_de_tercerosPor otra parte, te estarás preguntando ¿cómo sé qué paquetes puedo usar?, ¿dónde buscarlos?, y ¿cómo sé qué hacen? Esos paquetes lo puedes encontrar en la siguiente página https://packagist.org/
si deseas ver un ejemplo de uso de composer puedes ver https://blastcoding.com/utilizando-el-paquete-fakerphp/