Composer / el Package Manager de PHP

composer

¿Que es composer?

Composer es un packacage manager a nivel de aplicación para el lenguaje php  el cual provee un formato standard para manejar las dependencias de php y librerías requeridas. Nos permite declarar las librerías en las cuales nuestro proyecto depende y las administrara por nosotros (instalación/ actualización).

¿Que es una dependencia?

Es una aplicación o librería echa por terceros o nuestra la cual podemos agregar con composer.

Veamos un ejemplo practico, digamos que nuestro proyecto usara PHPMailer por ejemplo y dbal esto lo podemos gestionar con composer. Es por eso que es interesante ademas de que no estamos copiando y pegando nosotros 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.

Instalación.

Windows

Para instalar composer en windows es muy sencillo hay que bajar el archivo de instalación Setup.exe y ejecutarlo. El instalador bajara composer y definira una variable que contendra el valor de la ruta de el entorno lo que nos permitira llamarlo con el comando composer desde cualquer dirección.

Linux-UNIX-OSX

para instalarlo en linux se utiliza la linea 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 la linea de comandos que se encuentra en esta página  en el directorio de nuestro proyecto.

Esto nos bajara 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 la lina de comando donde sea y luego mover el archivo .phar a el directorio con el comando mv  composer.phar /usr/local/bin/composer y luego correrlo con el comando php tenga en cuenta que debe usar el comando sudo en algunos sistemas operativos.

¿Cómo se usa?

Lo primero que necesitamos es un archivo composer.json en nuestro proyecto, este archivo describe las dependecias de nuestro proyecto y otras clases de información (metadata) que puede ser por ejemplo licencia, autor, version, descripcion, soporte etc.

El siguiente es un ejemplo del composer.json de laravel

{
    "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 cuales requiere podemos correr el comando.

php composer.phar install

De este modo instalaremos todas las dependencias que pusimos como requeridas en require.

Buscando paquetes para nuestro proyecto

Por otra parte  te estaras preguntando como se que paquetes puedo usar, donde buscarlos y como se que hacen. Esos paquetes lo puedes encontrar en la siguiente pagina https://packagist.org/

Ayudame: Por favor deja un comentario antes de irte, tu opinión es bienvenida. Si te gusta el contenido comparte.