#WomenWhoCode #PHP #Symfony #Architecture #GoLang #DevOps #Python

Sagrario Meneses

Sagrario Meneses

  • Ingeniera en Informática.

  • 9 años de experiencia en desarrollo web.

  • Conocimientos en ecommerce.

  • Senior Software Engineer en Wizeline.

  • CI/CD

  • @phpmx @Technolatinas

    @WWCodeCDMX

@sagmmd

En el 2000

En el 2010 LATAM

AND...

Los involucrados...

Jordi Boggiano
@seldaek

Nils Adermann
@naderman

¿Qué es composer?

  • Abril 2011  -  Marzo 2012
  • Es un manejador de dependencias por proyecto.
  • Inspirado en:
    • NPM (NodeJs)
    • Bundler (Ruby)
  • Parecido a:
    • Ant (Java)
    • Maven (Java)
    • Pip (Python)
  • ​Requiere PHP 5.3.2+

https://getcomposer.org/

Composer es una herramienta para gestión de dependencias en PHP. Te permite declarar las bibliotecas de las que depende tu proyecto y las administrará (instalará / actualizará) por ti.

Ventajas

 

  • Gestión de dependencias (instalamos un paquete y Composer se encarga de instalar las dependencias).

Ventajas

  • Facilidad para instalar versiones específicas de paquetes y versiones selectivas.

 

  • Facilidad para actualizar los paquetes instalados y sus dependencias.

{
    "name": "smmd/test",
    "require": {
        "smmd/test-package": "^1.0"
    },
    "repositories": [
    {
      "type": "vcs",
      "url": “/full/path/to/the/local/smmd/test-package"
    },
    "authors": [
        {
            "name": "Sagrario Meneses",
            "email": "sagrario.meneses@gmail.com"
        }
    ]
}
  • Te permite utilizar repositorios locales.

Ventajas

  • Autoload configurations

Ventajas

"autoload": {
  "exclude-from-classmap": [
    "/Tests/",
    "/test/",
    "/tests/"
  ],
  "psr-4": {
    MyLibrary\\": "src/" 
  }
},
"autoload-dev": {
  "psr-4": { 
    "MyLibrary\\Tests\\": "tests/"
  }
},

Instalación

https://getcomposer.org/doc/00-intro.md

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

$ php composer-setup.php

$ php -r "unlink('composer-setup.php');"
$ php composer.phar
$ php composer-setup.php --install-dir=bin --filename=composer

Comandos

$ composer init

Comandos

{
    "name": "smmd/test",
    "require": {
        "guzzlehttp/guzzle": "^6.3"
    },
    "require-dev": {
        "phpunit/phpunit": "^7.5"
    },
    "authors": [
        {
            "name": "Sagrario Meneses",
            "email": "sagrario.meneses@gmail.com"
        }
    ]
}
$ composer self update

composer.json
example

$ composer search <dependency name>

Comandos

$ composer install
$ composer update
$ composer require package/dependency-name
$ composer update author-name/library-name

gitignore

  • Rendimiento / Cambios de Arquitectura

    • Descarga recursiva del metadata requerido.
    • Reducción del número de paquetes versionados en memoria.
    • Representación de conflictos en dependencias de forma mas eficiente. (3 reglas vs 1 regla).
    • Paralelización de HTTP request con curl multi, para descargas.
    • Uso de características de HTTP/2 para reducir vueltas en el server.
    • Cambios en el protocolo de Packagist.org reduciendo la información transferida, mejorando el cache y la infraestructura.

Composer 2.0 (24/10/20)

¿Por qué Composer 2?

  • Reproducción y Debug de problemas mas claro y sencillo.

  • Mejoras en el reporte de errores.

  • Actualizaciones amigables.

    • "Keep upgrading as painless as possible"
    • Parciales con restricciones temporales
  • Canonical default.

"canonical": false

$ composer update vendor/package:1.0.*
$ composer update --with vendor/package:1.0.*
  • Mantiene compatibilidad con PHP 5.3 ->
  • El composer.lock es interoperable entre versiones
  • La mayoría de los comandos son iguales.

Actualizar a Composer 2.0

$ composer self-update --2

// Revertir
$ composer self-update --1
  • Plugins
  • Comprobación de plataforma
  • Prioridades del repositorio
  • Configuraciones PSR-0/4 "estrictas".

Para tener en cuenta

// Para despliegue a producción
$ composer check-platform-reqs 
  • -> Composer 2.2 requerirá PHP 7.1

¿Puedo tener ambos?

  • Plugins no actualizados para 2.0 (aún)...
$ (sudo) cp `which composer` /usr/local/bin/composer1 
$ (sudo) composer1 self-update --1
$ (sudo) composer self-update --2 
$ (sudo) ln -s `which composer` /usr/local/bin/composer2
  • composer - La última version 2
  • composer1 - Una copia de Composer 1
  • composer2 - Un symlink a composer
  • GitHub

Automatización

  • GitLab

Links de interés.

  • https://getcomposer.org/
  • https://packagist.com/
  • https://packagist.org/
  • https://blog.packagist.com/
  • https://dependabot.com/php/
  • https://docs.renovatebot.com/php/
  • https://github.com/composer/composer/blob/master/UPGRADE-2.0.md
  • https://github.com/composer/composer​​
    
    "Composer 2 with Jordi Boggiano" Symfony UK
    

¿PREGUNTAS?

El manejador de dependencias de PHP: Composer

By smmd

El manejador de dependencias de PHP: Composer

  • 238