47
Composer Dependency manager

Composer dependency manager

Embed Size (px)

Citation preview

Page 1: Composer   dependency manager

ComposerDependency manager

Page 2: Composer   dependency manager

Fotografem, comentem, Twittem!

@VitorMattosRJ

Page 3: Composer   dependency manager
Page 4: Composer   dependency manager

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?

Page 5: Composer   dependency manager

Falaremos sobre...

Page 6: Composer   dependency manager

Só que não

Page 7: Composer   dependency manager

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

Page 8: Composer   dependency manager

Resumindo a palestrahttps://getcomposer.org

Page 9: Composer   dependency manager

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)

Page 10: Composer   dependency manager

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)

Page 11: Composer   dependency manager

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

Page 12: Composer   dependency manager

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

Page 13: Composer   dependency manager

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!

Page 14: Composer   dependency manager

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

Page 15: Composer   dependency manager

Partes envolvidas

Page 16: Composer   dependency manager

Partes envolvidas

lib

Page 17: Composer   dependency manager

Partes envolvidas

consumidor da lib

lib

Page 18: Composer   dependency manager

Partes envolvidas

consumidor da lib

lib

Mantenedor da lib

Page 19: Composer   dependency manager

Partes envolvidas

consumidor da lib

lib

Mantenedor da lib

Packagist

Page 20: Composer   dependency manager

Partes envolvidas

consumidor da lib

lib

Mantenedor da lib

Packagist

Page 21: Composer   dependency manager

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

Page 22: Composer   dependency manager

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

Page 23: Composer   dependency manager

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-

Page 24: Composer   dependency manager

O que é um phar?Simples:

phar = PHP Archive

http://php.net/phar

Page 25: Composer   dependency manager

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)

Page 26: Composer   dependency manager

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.

Page 27: Composer   dependency manager

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

"require": {

"vlucas/phpdotenv": "^2.4"

}

}

Page 28: Composer   dependency manager

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

{

"require": {

"vlucas/phpdotenv": "^2.4"

}

}

Page 29: Composer   dependency manager

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

{

"require": {

"vlucas/phpdotenv": "^2.4"

}

}

Page 30: Composer   dependency manager

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

Exemplo:

Page 31: Composer   dependency manager

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

Page 32: Composer   dependency manager

GitignoreO que devemos ignorar?

Page 33: Composer   dependency manager

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";

Page 34: Composer   dependency manager

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!

Page 35: Composer   dependency manager

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

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

Page 36: Composer   dependency manager

Require e require-devPara ambiente de desenvolvimento:

composer install

Para ambiente de produção:

composer install --no-dev

Exemplo:

composer require phpunit/phpunit --dev

Page 37: Composer   dependency manager

Versionamento semântico

1major

2minor

3patch

Page 38: Composer   dependency manager

Versionamento semântico

1major

2minor

3patch

Bugfixes

Page 39: Composer   dependency manager

Versionamento semântico

1major

2minor

3patch

BugfixesNovas funcionalidades

Page 40: Composer   dependency manager

Versionamento semântico

1major

2minor

3patch

BugfixesNovas funcionalidades

Mudança de arquitetura

Page 41: Composer   dependency manager

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

Page 42: Composer   dependency manager

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

Exemplo:

"repositories" : [{

"type" : "vcs",

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

}

]

Page 43: Composer   dependency manager

Estrutura do composer.jsonExemplo:

Phpunit, blueprint-sdk-maker

Page 44: Composer   dependency manager

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

Page 45: Composer   dependency manager

Um bom caminhohttp://phppackagechecklist.com

Page 46: Composer   dependency manager
Page 47: Composer   dependency manager

[email protected]

linkedin.com/in/vitormattos