composer dependency manager - tdc - poa 2017

70
Composer Dependency manager Porto Alegre / 2017

Upload: vitor-mattos

Post on 22-Jan-2018

82 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Composer   dependency manager - TDC - POA 2017

ComposerDependency manager

Porto Alegre / 2017

Page 2: Composer   dependency manager - TDC - POA 2017

Fotografem, comentem, Twittem!

@VitorMattosRJ

Page 3: Composer   dependency manager - TDC - POA 2017
Page 4: Composer   dependency manager - TDC - POA 2017

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 - TDC - POA 2017

Falaremos sobre...

Page 6: Composer   dependency manager - TDC - POA 2017

Só que não

Page 7: Composer   dependency manager - TDC - POA 2017

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 - TDC - POA 2017

Resumindo a palestrahttps://getcomposer.org

Page 9: Composer   dependency manager - TDC - POA 2017

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 - TDC - POA 2017

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 - TDC - POA 2017

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 - TDC - POA 2017

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 - TDC - POA 2017

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 - TDC - POA 2017

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 - TDC - POA 2017

Partes envolvidas

Page 16: Composer   dependency manager - TDC - POA 2017

Partes envolvidas

lib

Page 17: Composer   dependency manager - TDC - POA 2017

Partes envolvidas

consumidor da lib

lib

Page 18: Composer   dependency manager - TDC - POA 2017

Partes envolvidas

consumidor da lib

lib

Mantenedor da lib

Page 19: Composer   dependency manager - TDC - POA 2017

Partes envolvidas

consumidor da lib

lib

Mantenedor da lib

Packagist

Page 20: Composer   dependency manager - TDC - POA 2017

Partes envolvidas

consumidor da lib

lib

Mantenedor da lib

Packagist

Page 21: Composer   dependency manager - TDC - POA 2017

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 - TDC - POA 2017

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 - TDC - POA 2017

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 - TDC - POA 2017

O que é um phar?Simples:

phar = PHP Archive

http://php.net/phar

Page 25: Composer   dependency manager - TDC - POA 2017

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 - TDC - POA 2017

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 - TDC - POA 2017

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

"require": {

"vlucas/phpdotenv": "^2.4"

}

}

Page 28: Composer   dependency manager - TDC - POA 2017

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 - TDC - POA 2017

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 - TDC - POA 2017

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

Exemplo:

Page 31: Composer   dependency manager - TDC - POA 2017

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 - TDC - POA 2017

GitignoreO que devemos ignorar?

Page 33: Composer   dependency manager - TDC - POA 2017

Usando dependências

Page 34: Composer   dependency manager - TDC - POA 2017

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 - TDC - POA 2017

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 - TDC - POA 2017

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 - TDC - POA 2017

Versionamento semântico

1major

2minor

3patch

Page 38: Composer   dependency manager - TDC - POA 2017

Versionamento semântico

1major

2minor

3patch

Bugfixes

Page 39: Composer   dependency manager - TDC - POA 2017

Versionamento semântico

1major

2minor

3patch

BugfixesNovas funcionalidades

Page 40: Composer   dependency manager - TDC - POA 2017

Versionamento semântico

1major

2minor

3patch

BugfixesNovas funcionalidades

Mudança de arquitetura

Page 41: Composer   dependency manager - TDC - POA 2017

Versionamento semântico - exemplos

● 1.0.0● 1.0.2● 1.1.0● 0.2.5● 1.0.0-dev● 1.0.0-alpha3● 1.0.0-beta2● 1.0.0-RC5● v2.0.4-p1

Page 42: Composer   dependency manager - TDC - POA 2017

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

Page 43: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.jsonExemplo:

Phpunit, blueprint-sdk-maker

Page 44: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json <- Mantenedor da lib{

"name" : "vitormattos/blueprint-sdk-maker",

"description" : "Create SDK client from API Blueprint",

"license" : "MIT",

"type" : "library",

"homepage" : "https://github.com/vitormattos/blueprint-sdk-maker",

"authors" : [{

"name" : "Vitor Mattos",

"homepage" : "https://github.com/vitormattos"

}

],

"support" : {

"source" : "https://github.com/vitormattos/blueprint-sdk-maker/tree/master",

"issues" : "https://github.com/vitormattos/blueprint-sdk-maker/issues"

},

"keywords" : [

"api",

"blueprint",

"parser",

"apib"

],

Page 45: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json{

"name" : "vitormattos/blueprint-sdk-maker",

"description" : "Create SDK client from API Blueprint",

"license" : "MIT",

"type" : "library",

"homepage" : "https://github.com/vitormattos/blueprint-sdk-maker",

"authors" : [{

"name" : "Vitor Mattos",

"homepage" : "https://github.com/vitormattos"

}

],

"support" : {

"source" : "https://github.com/vitormattos/blueprint-sdk-maker/tree/master",

"issues" : "https://github.com/vitormattos/blueprint-sdk-maker/issues"

},

"keywords" : [

"api",

"blueprint",

"parser",

"apib"

],

Page 46: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json{

"name" : "vitormattos/blueprint-sdk-maker",

"description" : "Create SDK client from API Blueprint",

"license" : "MIT",

"type" : "library",

"homepage" : "https://github.com/vitormattos/blueprint-sdk-maker",

"authors" : [{

"name" : "Vitor Mattos",

"homepage" : "https://github.com/vitormattos"

}

],

"support" : {

"source" : "https://github.com/vitormattos/blueprint-sdk-maker/tree/master",

"issues" : "https://github.com/vitormattos/blueprint-sdk-maker/issues"

},

"keywords" : [

"api",

"blueprint",

"parser",

"apib"

],

Nome do pacote

Page 47: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json{

"name" : "vitormattos/blueprint-sdk-maker",

"description" : "Create SDK client from API Blueprint",

"license" : "MIT",

"type" : "library",

"homepage" : "https://github.com/vitormattos/blueprint-sdk-maker",

"authors" : [{

"name" : "Vitor Mattos",

"homepage" : "https://github.com/vitormattos"

}

],

"support" : {

"source" : "https://github.com/vitormattos/blueprint-sdk-maker/tree/master",

"issues" : "https://github.com/vitormattos/blueprint-sdk-maker/issues"

},

"keywords" : [

"api",

"blueprint",

"parser",

"apib"

],

Nome do pacoteDescrição

Page 48: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json{

"name" : "vitormattos/blueprint-sdk-maker",

"description" : "Create SDK client from API Blueprint",

"license" : "MIT",

"type" : "library",

"homepage" : "https://github.com/vitormattos/blueprint-sdk-maker",

"authors" : [{

"name" : "Vitor Mattos",

"homepage" : "https://github.com/vitormattos"

}

],

"support" : {

"source" : "https://github.com/vitormattos/blueprint-sdk-maker/tree/master",

"issues" : "https://github.com/vitormattos/blueprint-sdk-maker/issues"

},

"keywords" : [

"api",

"blueprint",

"parser",

"apib"

],

Nome do pacoteDescrição

Licença

Page 49: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json{

"name" : "vitormattos/blueprint-sdk-maker",

"description" : "Create SDK client from API Blueprint",

"license" : "MIT",

"type" : "library",

"homepage" : "https://github.com/vitormattos/blueprint-sdk-maker",

"authors" : [{

"name" : "Vitor Mattos",

"homepage" : "https://github.com/vitormattos"

}

],

"support" : {

"source" : "https://github.com/vitormattos/blueprint-sdk-maker/tree/master",

"issues" : "https://github.com/vitormattos/blueprint-sdk-maker/issues"

},

"keywords" : [

"api",

"blueprint",

"parser",

"apib"

],

Nome do pacoteDescrição

Licença

Autores

Page 50: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json{

"name" : "vitormattos/blueprint-sdk-maker",

"description" : "Create SDK client from API Blueprint",

"license" : "MIT",

"type" : "library",

"homepage" : "https://github.com/vitormattos/blueprint-sdk-maker",

"authors" : [{

"name" : "Vitor Mattos",

"homepage" : "https://github.com/vitormattos"

}

],

"support" : {

"source" : "https://github.com/vitormattos/blueprint-sdk-maker/tree/master",

"issues" : "https://github.com/vitormattos/blueprint-sdk-maker/issues"

},

"keywords" : [

"api",

"blueprint",

"parser",

"apib"

],

Nome do pacoteDescrição

Licença

Autores

Dados de suporte

Page 51: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json{

"name" : "vitormattos/blueprint-sdk-maker",

"description" : "Create SDK client from API Blueprint",

"license" : "MIT",

"type" : "library",

"homepage" : "https://github.com/vitormattos/blueprint-sdk-maker",

"authors" : [{

"name" : "Vitor Mattos",

"homepage" : "https://github.com/vitormattos"

}

],

"support" : {

"source" : "https://github.com/vitormattos/blueprint-sdk-maker/tree/master",

"issues" : "https://github.com/vitormattos/blueprint-sdk-maker/issues"

},

"keywords" : [

"api",

"blueprint",

"parser",

"apib"

],

Nome do pacoteDescrição

Licença

Autores

Dados de suporte

Palavras chaves

Page 52: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json "autoload" : {

"psr-4" : {

"BlueprintSdkMaker\\" : "src/Sdk"

}

},

"require" : {

"php" : ">=7",

"symfony/console" : "^3.2",

"brianseitel/oasis-mson-parser" : "dev-newest"

},

"require-dev" : {

"nikic/php-parser" : "^3.0",

"phpunit/phpunit" : "^6.1",

"squizlabs/php_codesniffer" : "^3.0",

"overtrue/phplint" : "^0.2.1",

"satooshi/php-coveralls" : "^1.0",

"phpstan/phpstan" : "^0.7.0"

},

Page 53: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json "autoload" : {

"psr-4" : {

"BlueprintSdkMaker\\" : "src/Sdk"

}

},

"require" : {

"php" : ">=7",

"symfony/console" : "^3.2",

"brianseitel/oasis-mson-parser" : "dev-newest"

},

"require-dev" : {

"nikic/php-parser" : "^3.0",

"phpunit/phpunit" : "^6.1",

"squizlabs/php_codesniffer" : "^3.0",

"overtrue/phplint" : "^0.2.1",

"satooshi/php-coveralls" : "^1.0",

"phpstan/phpstan" : "^0.7.0"

},

Autoload

Page 54: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json "autoload" : {

"psr-4" : {

"BlueprintSdkMaker\\" : "src/Sdk"

}

},

"require" : {

"php" : ">=7",

"symfony/console" : "^3.2",

"brianseitel/oasis-mson-parser" : "dev-newest"

},

"require-dev" : {

"nikic/php-parser" : "^3.0",

"phpunit/phpunit" : "^6.1",

"squizlabs/php_codesniffer" : "^3.0",

"overtrue/phplint" : "^0.2.1",

"satooshi/php-coveralls" : "^1.0",

"phpstan/phpstan" : "^0.7.0"

},

Autoload

Namespace

Page 55: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json "autoload" : {

"psr-4" : {

"BlueprintSdkMaker\\" : "src/Sdk"

}

},

"require" : {

"php" : ">=7",

"symfony/console" : "^3.2",

"brianseitel/oasis-mson-parser" : "dev-newest"

},

"require-dev" : {

"nikic/php-parser" : "^3.0",

"phpunit/phpunit" : "^6.1",

"squizlabs/php_codesniffer" : "^3.0",

"overtrue/phplint" : "^0.2.1",

"satooshi/php-coveralls" : "^1.0",

"phpstan/phpstan" : "^0.7.0"

},

Autoload

Namespace

Require

Page 56: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json "autoload" : {

"psr-4" : {

"BlueprintSdkMaker\\" : "src/Sdk"

}

},

"require" : {

"php" : ">=7",

"symfony/console" : "^3.2",

"brianseitel/oasis-mson-parser" : "dev-newest"

},

"require-dev" : {

"nikic/php-parser" : "^3.0",

"phpunit/phpunit" : "^6.1",

"squizlabs/php_codesniffer" : "^3.0",

"overtrue/phplint" : "^0.2.1",

"satooshi/php-coveralls" : "^1.0",

"phpstan/phpstan" : "^0.7.0"

},

Autoload

Namespace

Require

Require dev

Page 57: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json "autoload" : {

"psr-4" : {

"BlueprintSdkMaker\\" : "src/Sdk"

}

},

"require" : {

"php" : ">=7",

"symfony/console" : "^3.2",

"brianseitel/oasis-mson-parser" : "dev-newest"

},

"require-dev" : {

"nikic/php-parser" : "^3.0",

"phpunit/phpunit" : "^6.1",

"squizlabs/php_codesniffer" : "^3.0",

"overtrue/phplint" : "^0.2.1",

"satooshi/php-coveralls" : "^1.0",

"phpstan/phpstan" : "^0.7.0"

},

Page 58: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json "autoload" : {

"psr-4" : {

"BlueprintSdkMaker\\" : "src/Sdk"

}

},

"require" : {

"php" : ">=7",

"symfony/console" : "^3.2",

"brianseitel/oasis-mson-parser" : "dev-newest"

},

"require-dev" : {

"nikic/php-parser" : "^3.0",

"phpunit/phpunit" : "^6.1",

"squizlabs/php_codesniffer" : "^3.0",

"overtrue/phplint" : "^0.2.1",

"satooshi/php-coveralls" : "^1.0",

"phpstan/phpstan" : "^0.7.0"

},

scripts

Page 59: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json "autoload" : {

"psr-4" : {

"BlueprintSdkMaker\\" : "src/Sdk"

}

},

"require" : {

"php" : ">=7",

"symfony/console" : "^3.2",

"brianseitel/oasis-mson-parser" : "dev-newest"

},

"require-dev" : {

"nikic/php-parser" : "^3.0",

"phpunit/phpunit" : "^6.1",

"squizlabs/php_codesniffer" : "^3.0",

"overtrue/phplint" : "^0.2.1",

"satooshi/php-coveralls" : "^1.0",

"phpstan/phpstan" : "^0.7.0"

},

scripts

Agrupando scripts

Page 60: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json "autoload" : {

"psr-4" : {

"BlueprintSdkMaker\\" : "src/Sdk"

}

},

"require" : {

"php" : ">=7",

"symfony/console" : "^3.2",

"brianseitel/oasis-mson-parser" : "dev-newest"

},

"require-dev" : {

"nikic/php-parser" : "^3.0",

"phpunit/phpunit" : "^6.1",

"squizlabs/php_codesniffer" : "^3.0",

"overtrue/phplint" : "^0.2.1",

"satooshi/php-coveralls" : "^1.0",

"phpstan/phpstan" : "^0.7.0"

},

scripts

Binários

Agrupando scripts

Page 61: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json "autoload" : {

"psr-4" : {

"BlueprintSdkMaker\\" : "src/Sdk"

}

},

"require" : {

"php" : ">=7",

"symfony/console" : "^3.2",

"brianseitel/oasis-mson-parser" : "dev-newest"

},

"require-dev" : {

"nikic/php-parser" : "^3.0",

"phpunit/phpunit" : "^6.1",

"squizlabs/php_codesniffer" : "^3.0",

"overtrue/phplint" : "^0.2.1",

"satooshi/php-coveralls" : "^1.0",

"phpstan/phpstan" : "^0.7.0"

},

scripts

Repositórios

Binários

Agrupando scripts

Page 62: Composer   dependency manager - TDC - POA 2017

Estrutura do composer.json "autoload" : {

"psr-4" : {

"BlueprintSdkMaker\\" : "src/Sdk"

}

},

"require" : {

"php" : ">=7",

"symfony/console" : "^3.2",

"brianseitel/oasis-mson-parser" : "dev-newest"

},

"require-dev" : {

"nikic/php-parser" : "^3.0",

"phpunit/phpunit" : "^6.1",

"squizlabs/php_codesniffer" : "^3.0",

"overtrue/phplint" : "^0.2.1",

"satooshi/php-coveralls" : "^1.0",

"phpstan/phpstan" : "^0.7.0"

},

scripts

Repositórios

Binários

Agrupando scripts

Tipo de repositório

Page 63: Composer   dependency manager - TDC - POA 2017

Scripts - Command Events

● pre-install-cmd: occurs before the install command is executed with a lock file present.● post-install-cmd: occurs after the install command has been executed with a lock file present.● pre-update-cmd: occurs before the update command is executed, or before the install command is executed

without a lock file present.● post-update-cmd: occurs after the update command has been executed, or after the installcommand has been

executed without a lock file present.● post-status-cmd: occurs after the status command has been executed.● pre-archive-cmd: occurs before the archive command is executed.● post-archive-cmd: occurs after the archive command has been executed.● pre-autoload-dump: occurs before the autoloader is dumped, either during install/update, or via the

dump-autoload command.● post-autoload-dump: occurs after the autoloader has been dumped, either during install/update, or via the

dump-autoload command.● post-root-package-install: occurs after the root package has been installed, during the create-project command.● post-create-project-cmd: occurs after the create-project command has been executed.

Page 64: Composer   dependency manager - TDC - POA 2017

Scripts - exemplo: Laravel

Page 65: Composer   dependency manager - TDC - POA 2017

Publique no packagist

Page 66: Composer   dependency manager - TDC - POA 2017

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 67: Composer   dependency manager - TDC - POA 2017

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

Page 68: Composer   dependency manager - TDC - POA 2017

Um bom caminho: boas práhttp://phppackagechecklist.com

Page 69: Composer   dependency manager - TDC - POA 2017
Page 70: Composer   dependency manager - TDC - POA 2017

[email protected]

linkedin.com/in/vitormattos