Composer dependency manager

Preview:

Citation preview

ComposerDependency manager

Fotografem, comentem, Twittem!

@VitorMattosRJ

Desenvolvedor PHP desde 2003

Amante de opensource

Evangelista PHP

PHP Zend Certified Engineer ( ZEND024235 )

PHPRio ( https://telegram.me/phprio )

Redes sociais: ( procure por vitormattos )

Quem sou eu?

Falaremos sobre...

Só que não

Roteiro● Introdução e breve histórico● Uso do packagist como consumidor● Criação de um pacote (tornando-se um mantenedor)● Formas de distribuir este pacote● Criação de scripts

Resumindo a palestrahttps://getcomposer.org

O que é Composer e para que serve?Ferramenta para gestão de dependências em projetos PHP inspirado no npm (node JS) e bundler (do Ruby)

Isola dependências externas evitando necessidade de versionamento das mesmas (vendor)

O que é Composer e para que serve?Ferramenta para gestão de dependências em projetos PHP inspirado no npm (node JS) e bundler (do Ruby)

Isola dependências externas evitando necessidade de versionamento das mesmas (vendor)

O que são dependências?Todo artefato de software seu ou de terceiros cuja finalidade é o reaproveitamento de código.

Voltando: O que é Composer e para que serve?Ferramenta para gestão de dependências em projetos PHP inspirado no npm (node JS) e bundler (do Ruby)

Declaração de quais são todas as dependências externas e suas versões (composer.json)

Isola dependências externas evitando necessidade de versionamento das mesmas (vendor)

Possui um agregador de repositórios central

Possibilidade de uso de repositório descentralizado

Responsabilidade única das partes do projeto

O que é Composer e para que serve?Você declara somente o que VOCÊ precisa O Composer encontra as bibliotecas declaradas e as instala com todas as suas dependências satisfeitas.

Reduz o tamanho dos projetos

Reduz esforço

Facilita redistribuição de projetos

E muito mais!

Um pouco de históriaSuporte a namespaces no PHP lançado no PHP 5.3 em 2009

Surgimento do PHP-FIG em 2013

Lançamento da PSR-0 com primeiras definições de autoload

Criação do Composer em 2013 após o PHP-FIG

Adoção do composer por parte de grandes frameworks e ferramentas

Lançamento da PSR-4 com melhorias nas definições de autoload em 2014

Partes envolvidas

Partes envolvidas

lib

Partes envolvidas

consumidor da lib

lib

Partes envolvidas

consumidor da lib

lib

Mantenedor da lib

Partes envolvidas

consumidor da lib

lib

Mantenedor da lib

Packagist

Partes envolvidas

consumidor da lib

lib

Mantenedor da lib

Packagist

Visão do consumidor: instalaçãoÉ feito em PHP

Exige no mínimo PHP 5.3.2

Baixe do site do composer

Funciona em qualquer plataforma

Mais informações: https://getcomposer.org/doc/00-intro.md

Visão do consumidor: instalaçãoVamos instalar…

Local: curl -s http://getcomposer.org/installer | php

Global: curl -s http://getcomposer.org/installer | php -- --install-dir=/home/vitor/.bin --filename=composer

Ou: sudo apt install composer

Visão do consumidor: atualização manualCaso tenha baixado manualmente, precisa atualizar manualmente:

composer selfupdate

https://getcomposer.org/doc/03-cli.md#self-update-selfupdate-

O que é um phar?Simples:

phar = PHP Archive

http://php.net/phar

O que é um JSON?

JSON, um acrônimo para "JavaScript Object Notation", é um formato leve para intercâmbio de dados computacionais. JSON é um subconjunto da notação de objeto de JavaScript, mas seu uso não requer JavaScript exclusivamente. O formato JSON foi originalmente criado por Douglas Crockford e é descrito no RFC 4627. O media-type oficial do JSON é application/json e a extensão é.json.

JSON

Mais em Wikipedia (PT)

O que é um JSON?JSON, de forma resumida, é uma linguagem para formatar dados de forma leve e legível para humanos.

Sua estrutura é bem simples e de fácil aprendizado. Ela permite estruturar e formatar os dados em objetos.

composer.json - estrutura básica - sua partitura{

"require": {

"vlucas/phpdotenv": "^2.4"

}

}

Instalando a primeira dependênciaCrie um arquivo composer.json e coloque a sua dependência nele:

{

"require": {

"vlucas/phpdotenv": "^2.4"

}

}

Instalando a primeira dependênciaCrie um arquivo composer.json e coloque a sua dependência nele:

{

"require": {

"vlucas/phpdotenv": "^2.4"

}

}

Instalando a primeira dependênciacomposer require <maintainer>/<dependency>

Exemplo:

O que acontece após instalar?Arquivos criados:

composer.json

Informações diversas sobre seu projeto, dependências instaladas, etc

composer.lock

Todas as versões que foram instaladas

vendor

Todas as dependências instaladas

GitignoreO que devemos ignorar?

Usando dependências<?phpuse Cocur\Slugify\Slugify;

require_once 'vendor/autoload.php';

if(file_exists('.env')) { $dotenv = new Dotenv\Dotenv(__DIR__); $dotenv->load();}

echo getenv('TESTE');echo "\n";

$string = 'Minicurso Composer!';$slug = new Slugify();echo $slug->slugify($string);echo "\n";

composer.lockFixa as versões a serem instaladas garantindo que suas dependências e suas subdependências estão exatamente nas mesmas versões

Sempre versione este arquivo!

Require e require-devRequire é apenas para ambiente de produção

Require-dev é apenas para amiente de desenvolvimento:Exemplo: phpunit, behat, phpcs, etc

Require e require-devPara ambiente de desenvolvimento:

composer install

Para ambiente de produção:

composer install --no-dev

Exemplo:

composer require phpunit/phpunit --dev

Versionamento semântico

1major

2minor

3patch

Versionamento semântico

1major

2minor

3patch

Bugfixes

Versionamento semântico

1major

2minor

3patch

BugfixesNovas funcionalidades

Versionamento semântico

1major

2minor

3patch

BugfixesNovas funcionalidades

Mudança de arquitetura

Instalar ou atualizar?Instalar sempre, atualizar apenas quando necessitar atualizar a versão das dependências

E se encontrar um bug?Fork, corrija e use a correção

Exemplo:

"repositories" : [{

"type" : "vcs",

"url" : "https://github.com/vitormattos/oasis-mson-parser"

}

]

Estrutura do composer.jsonExemplo:

Phpunit, blueprint-sdk-maker

Indo para produçãocomposer install --prefer-dist --no-dev --optimize-autoload

Um bom caminhohttp://phppackagechecklist.com

Perguntasvitor.mattos@phprio.org

linkedin.com/in/vitormattos

Recommended