SlideShare a Scribd company logo
1 of 70
Download to read offline
Composer
Dependency manager
Porto Alegre / 2017
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 palestra
https://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ória
Suporte 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ção
Vamos 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 manual
Caso 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ência
Crie um arquivo composer.json e coloque a sua dependência nele:
{
"require": {
"vlucas/phpdotenv": "^2.4"
}
}
Instalando a primeira dependência
Crie um arquivo composer.json e coloque a sua dependência nele:
{
"require": {
"vlucas/phpdotenv": "^2.4"
}
}
Instalando a primeira dependência
composer 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
Gitignore
O que devemos ignorar?
Usando dependências
composer.lock
Fixa 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-dev
Require é apenas para ambiente de produção
Require-dev é apenas para amiente de desenvolvimento:
Exemplo: phpunit, behat, phpcs, etc
Require e require-dev
Para ambiente de desenvolvimento:
composer install
Para ambiente de produção:
composer install --no-dev
Exemplo:
composer require phpunit/phpunit --dev
Versionamento semântico
1
major
2
minor
3
patch
Versionamento semântico
1
major
2
minor
3
patch
Bugfixes
Versionamento semântico
1
major
2
minor
3
patch
Bugfixes
Novas
funcionalidades
Versionamento semântico
1
major
2
minor
3
patch
Bugfixes
Novas
funcionalidades
Mudança de
arquitetura
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
Instalar ou atualizar?
Instalar sempre, atualizar apenas quando necessitar atualizar a versão das
dependências
Estrutura do composer.json
Exemplo:
Phpunit, blueprint-sdk-maker
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",
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",
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",
Nome do pacote
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",
Nome do pacote
Descrição
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",
Nome do pacote
Descrição
Licença
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",
Nome do pacote
Descrição
Licença
Autores
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",
Nome do pacote
Descrição
Licença
Autores
Dados de suporte
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",
Nome do pacote
Descrição
Licença
Autores
Dados de suporte
Palavras chaves
Estrutura do composer.json
"autoload" : {
"psr-4" : {
"BlueprintSdkMaker" : "src/Sdk"
}
},
"require" : {
"php" : ">=7",
"symfony/console" : "^3.2",
Estrutura do composer.json
"autoload" : {
"psr-4" : {
"BlueprintSdkMaker" : "src/Sdk"
}
},
"require" : {
"php" : ">=7",
"symfony/console" : "^3.2",
Autoload
Estrutura do composer.json
"autoload" : {
"psr-4" : {
"BlueprintSdkMaker" : "src/Sdk"
}
},
"require" : {
"php" : ">=7",
"symfony/console" : "^3.2",
Autoload
Namespace
Estrutura do composer.json
"autoload" : {
"psr-4" : {
"BlueprintSdkMaker" : "src/Sdk"
}
},
"require" : {
"php" : ">=7",
"symfony/console" : "^3.2",
Autoload
Namespace
Require
Estrutura do composer.json
"autoload" : {
"psr-4" : {
"BlueprintSdkMaker" : "src/Sdk"
}
},
"require" : {
"php" : ">=7",
"symfony/console" : "^3.2",
Autoload
Namespace
Require
Require dev
Estrutura do composer.json
"autoload" : {
"psr-4" : {
"BlueprintSdkMaker" : "src/Sdk"
}
},
"require" : {
"php" : ">=7",
"symfony/console" : "^3.2",
Estrutura do composer.json
"autoload" : {
"psr-4" : {
"BlueprintSdkMaker" : "src/Sdk"
}
},
"require" : {
"php" : ">=7",
"symfony/console" : "^3.2",
scripts
Estrutura do composer.json
"autoload" : {
"psr-4" : {
"BlueprintSdkMaker" : "src/Sdk"
}
},
"require" : {
"php" : ">=7",
"symfony/console" : "^3.2",
scripts
Agrupando scripts
Estrutura do composer.json
"autoload" : {
"psr-4" : {
"BlueprintSdkMaker" : "src/Sdk"
}
},
"require" : {
"php" : ">=7",
"symfony/console" : "^3.2",
scripts
Binários
Agrupando scripts
Estrutura do composer.json
"autoload" : {
"psr-4" : {
"BlueprintSdkMaker" : "src/Sdk"
}
},
"require" : {
"php" : ">=7",
"symfony/console" : "^3.2",
scripts
Repositórios
Binários
Agrupando scripts
Estrutura do composer.json
"autoload" : {
"psr-4" : {
"BlueprintSdkMaker" : "src/Sdk"
}
},
"require" : {
"php" : ">=7",
"symfony/console" : "^3.2",
scripts
Repositórios
Binários
Agrupando scripts
Tipo de repositório
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.
Scripts - exemplo: Laravel
Publique no packagist
E se encontrar um bug?
Fork, corrija e use a correção
Exemplo:
"repositories" : [{
"type" : "vcs",
"url" : "https://github.com/vitormattos/oasis-mson-parser"
}
]
Indo para produção
composer install --prefer-dist --no-dev --optimize-autoload
Um bom caminho: boas prá
http://phppackagechecklist.com
Perguntas
vitor.mattos@phprio.org
linkedin.com/in/vitormattos

More Related Content

What's hot

Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHPFlávio Lisboa
 
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...Criciúma Dev
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework LaminasFlávio Lisboa
 
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasBDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasVitor Mattos
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyRelsi Maron
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015Renato Groff
 
Engenharia rever sa mentebinaria
Engenharia rever sa   mentebinariaEngenharia rever sa   mentebinaria
Engenharia rever sa mentebinariaPatrese Renan
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHPFlávio Lisboa
 
Entendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHPEntendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHPAdler Medrado
 
php4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPphp4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPRamon Ribeiro Rabello
 
Como contribuir-com-open-source-php conference-2016
Como contribuir-com-open-source-php conference-2016Como contribuir-com-open-source-php conference-2016
Como contribuir-com-open-source-php conference-2016Marcos Paulo
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonIgor Sobreira
 
PHP e o Desenvolvimento Mobile Web - PHPhederal
PHP e o Desenvolvimento Mobile Web - PHPhederalPHP e o Desenvolvimento Mobile Web - PHPhederal
PHP e o Desenvolvimento Mobile Web - PHPhederalBruno Fernandes "PorKaria"
 
Desenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software LivreDesenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software Livreelliando dias
 
Trabalhando de forma profissional com silex
Trabalhando de forma profissional com silexTrabalhando de forma profissional com silex
Trabalhando de forma profissional com silexMichael Douglas
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013Giovanni Bassi
 
A Evolução do PHP - 4º Dev In Santos
A Evolução do PHP - 4º Dev In SantosA Evolução do PHP - 4º Dev In Santos
A Evolução do PHP - 4º Dev In SantosEvaldo Junior
 

What's hot (20)

Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHP
 
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework Laminas
 
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasBDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemas
 
Frameworks PHP
Frameworks PHPFrameworks PHP
Frameworks PHP
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2py
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015
 
Engenharia rever sa mentebinaria
Engenharia rever sa   mentebinariaEngenharia rever sa   mentebinaria
Engenharia rever sa mentebinaria
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHP
 
Entendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHPEntendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHP
 
php4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPphp4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHP
 
Desenvolvimento Mobile Web usando PHP
Desenvolvimento Mobile Web usando PHPDesenvolvimento Mobile Web usando PHP
Desenvolvimento Mobile Web usando PHP
 
Como contribuir-com-open-source-php conference-2016
Como contribuir-com-open-source-php conference-2016Como contribuir-com-open-source-php conference-2016
Como contribuir-com-open-source-php conference-2016
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
PHP e o Desenvolvimento Mobile Web - PHPhederal
PHP e o Desenvolvimento Mobile Web - PHPhederalPHP e o Desenvolvimento Mobile Web - PHPhederal
PHP e o Desenvolvimento Mobile Web - PHPhederal
 
Desenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software LivreDesenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software Livre
 
Trabalhando de forma profissional com silex
Trabalhando de forma profissional com silexTrabalhando de forma profissional com silex
Trabalhando de forma profissional com silex
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 
Visão geral type script
Visão geral type scriptVisão geral type script
Visão geral type script
 
A Evolução do PHP - 4º Dev In Santos
A Evolução do PHP - 4º Dev In SantosA Evolução do PHP - 4º Dev In Santos
A Evolução do PHP - 4º Dev In Santos
 

Similar to Composer dependency manager - TDC - POA 2017

Drupal Camp Campinas 2016 - Composer 101 e sua integração com drupal 8
Drupal Camp Campinas 2016 - Composer 101 e sua integração com drupal 8Drupal Camp Campinas 2016 - Composer 101 e sua integração com drupal 8
Drupal Camp Campinas 2016 - Composer 101 e sua integração com drupal 8Natan Moraes
 
Composer para Gestão de Dependências - Encontro PHP - Season
Composer para Gestão de Dependências - Encontro PHP - SeasonComposer para Gestão de Dependências - Encontro PHP - Season
Composer para Gestão de Dependências - Encontro PHP - SeasonRogerio Prado de Jesus
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizadosThiago Rodrigues
 
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressFerramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressTiago Hillebrandt
 
Vagrant uma ferramenta realmente útil e versátil
Vagrant   uma ferramenta realmente útil e versátilVagrant   uma ferramenta realmente útil e versátil
Vagrant uma ferramenta realmente útil e versátilWanderlei Silva do Carmo
 
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...Embarcados
 
Programação Orientada a Objetos (POO) com PHP - Parte 2
Programação Orientada a Objetos (POO) com PHP - Parte 2Programação Orientada a Objetos (POO) com PHP - Parte 2
Programação Orientada a Objetos (POO) com PHP - Parte 2Israel Messias
 
Interoperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeInteroperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeAlessandro Binhara
 
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...Eliel Simoncelo
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterEric Silva
 
Controlando Projetos com Netbeans e Subversion
Controlando Projetos com Netbeans e SubversionControlando Projetos com Netbeans e Subversion
Controlando Projetos com Netbeans e Subversionlekitamura
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Palestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPressPalestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPressRômulo Zoch
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Daniel Makiyama
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicRicardo Guerra Freitas
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo realEvandro Silvestre
 
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataformaAndroid Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataformaFelipe Silveira
 
Lab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvLab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvPedro Fernandes Vieira
 

Similar to Composer dependency manager - TDC - POA 2017 (20)

Drupal Camp Campinas 2016 - Composer 101 e sua integração com drupal 8
Drupal Camp Campinas 2016 - Composer 101 e sua integração com drupal 8Drupal Camp Campinas 2016 - Composer 101 e sua integração com drupal 8
Drupal Camp Campinas 2016 - Composer 101 e sua integração com drupal 8
 
Composer para Gestão de Dependências - Encontro PHP - Season
Composer para Gestão de Dependências - Encontro PHP - SeasonComposer para Gestão de Dependências - Encontro PHP - Season
Composer para Gestão de Dependências - Encontro PHP - Season
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizados
 
WP Composer
WP ComposerWP Composer
WP Composer
 
Iniciando com django
Iniciando com djangoIniciando com django
Iniciando com django
 
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressFerramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
 
Vagrant uma ferramenta realmente útil e versátil
Vagrant   uma ferramenta realmente útil e versátilVagrant   uma ferramenta realmente útil e versátil
Vagrant uma ferramenta realmente útil e versátil
 
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
 
Programação Orientada a Objetos (POO) com PHP - Parte 2
Programação Orientada a Objetos (POO) com PHP - Parte 2Programação Orientada a Objetos (POO) com PHP - Parte 2
Programação Orientada a Objetos (POO) com PHP - Parte 2
 
Interoperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeInteroperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente Mainframe
 
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
 
Controlando Projetos com Netbeans e Subversion
Controlando Projetos com Netbeans e SubversionControlando Projetos com Netbeans e Subversion
Controlando Projetos com Netbeans e Subversion
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Palestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPressPalestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPress
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo real
 
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataformaAndroid Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
 
Lab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvLab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenv
 

More from Vitor Mattos

Que oportunidades me encontrem!
Que oportunidades me encontrem!Que oportunidades me encontrem!
Que oportunidades me encontrem!Vitor Mattos
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017Vitor Mattos
 
BDD: torne viva a documentação de seus sistemas
BDD: torne viva a documentação de seus sistemasBDD: torne viva a documentação de seus sistemas
BDD: torne viva a documentação de seus sistemasVitor Mattos
 
Xdebug seus problemas acabaram - TDC - PHPeste
Xdebug   seus problemas acabaram - TDC - PHPesteXdebug   seus problemas acabaram - TDC - PHPeste
Xdebug seus problemas acabaram - TDC - PHPesteVitor Mattos
 
Seja subversivo, faça testes
Seja subversivo, faça testesSeja subversivo, faça testes
Seja subversivo, faça testesVitor Mattos
 
Apresentação feedback cool
Apresentação feedback coolApresentação feedback cool
Apresentação feedback coolVitor Mattos
 
Melhor que whatsapp: telegram + php
Melhor que whatsapp: telegram + phpMelhor que whatsapp: telegram + php
Melhor que whatsapp: telegram + phpVitor Mattos
 
BDD + PHP = behat!
BDD + PHP = behat!BDD + PHP = behat!
BDD + PHP = behat!Vitor Mattos
 
Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Vitor Mattos
 

More from Vitor Mattos (11)

Que oportunidades me encontrem!
Que oportunidades me encontrem!Que oportunidades me encontrem!
Que oportunidades me encontrem!
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
 
BDD: torne viva a documentação de seus sistemas
BDD: torne viva a documentação de seus sistemasBDD: torne viva a documentação de seus sistemas
BDD: torne viva a documentação de seus sistemas
 
Xdebug seus problemas acabaram - TDC - PHPeste
Xdebug   seus problemas acabaram - TDC - PHPesteXdebug   seus problemas acabaram - TDC - PHPeste
Xdebug seus problemas acabaram - TDC - PHPeste
 
Seja subversivo, faça testes
Seja subversivo, faça testesSeja subversivo, faça testes
Seja subversivo, faça testes
 
Apresentação feedback cool
Apresentação feedback coolApresentação feedback cool
Apresentação feedback cool
 
Melhor que whatsapp: telegram + php
Melhor que whatsapp: telegram + phpMelhor que whatsapp: telegram + php
Melhor que whatsapp: telegram + php
 
BDD + PHP = behat!
BDD + PHP = behat!BDD + PHP = behat!
BDD + PHP = behat!
 
PHP em Background
PHP em BackgroundPHP em Background
PHP em Background
 
Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!
 
JasperReports
JasperReportsJasperReports
JasperReports
 

Composer dependency manager - TDC - POA 2017

  • 3.
  • 4. 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?
  • 7. 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
  • 9. 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)
  • 10. 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)
  • 11. O que são dependências? Todo artefato de software seu ou de terceiros cuja finalidade é o reaproveitamento de código.
  • 12. 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
  • 13. 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!
  • 14. Um pouco de história Suporte 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
  • 18. Partes envolvidas consumidor da lib lib Mantenedor da lib
  • 19. Partes envolvidas consumidor da lib lib Mantenedor da lib Packagist
  • 20. Partes envolvidas consumidor da lib lib Mantenedor da lib Packagist
  • 21. 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
  • 22. Visão do consumidor: instalação Vamos 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
  • 23. Visão do consumidor: atualização manual Caso tenha baixado manualmente, precisa atualizar manualmente: composer selfupdate https://getcomposer.org/doc/03-cli.md#self-update-selfupdate-
  • 24. O que é um phar? Simples: phar = PHP Archive http://php.net/phar
  • 25. 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)
  • 26. 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.
  • 27. composer.json - estrutura básica - sua partitura { "require": { "vlucas/phpdotenv": "^2.4" } }
  • 28. Instalando a primeira dependência Crie um arquivo composer.json e coloque a sua dependência nele: { "require": { "vlucas/phpdotenv": "^2.4" } }
  • 29. Instalando a primeira dependência Crie um arquivo composer.json e coloque a sua dependência nele: { "require": { "vlucas/phpdotenv": "^2.4" } }
  • 30. Instalando a primeira dependência composer require <maintainer>/<dependency> Exemplo:
  • 31. 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
  • 34. composer.lock Fixa 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!
  • 35. Require e require-dev Require é apenas para ambiente de produção Require-dev é apenas para amiente de desenvolvimento: Exemplo: phpunit, behat, phpcs, etc
  • 36. Require e require-dev Para ambiente de desenvolvimento: composer install Para ambiente de produção: composer install --no-dev Exemplo: composer require phpunit/phpunit --dev
  • 41. 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
  • 42. Instalar ou atualizar? Instalar sempre, atualizar apenas quando necessitar atualizar a versão das dependências
  • 44. 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",
  • 45. 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",
  • 46. 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", Nome do pacote
  • 47. 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", Nome do pacote Descrição
  • 48. 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", Nome do pacote Descrição Licença
  • 49. 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", Nome do pacote Descrição Licença Autores
  • 50. 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", Nome do pacote Descrição Licença Autores Dados de suporte
  • 51. 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", Nome do pacote Descrição Licença Autores Dados de suporte Palavras chaves
  • 52. Estrutura do composer.json "autoload" : { "psr-4" : { "BlueprintSdkMaker" : "src/Sdk" } }, "require" : { "php" : ">=7", "symfony/console" : "^3.2",
  • 53. Estrutura do composer.json "autoload" : { "psr-4" : { "BlueprintSdkMaker" : "src/Sdk" } }, "require" : { "php" : ">=7", "symfony/console" : "^3.2", Autoload
  • 54. Estrutura do composer.json "autoload" : { "psr-4" : { "BlueprintSdkMaker" : "src/Sdk" } }, "require" : { "php" : ">=7", "symfony/console" : "^3.2", Autoload Namespace
  • 55. Estrutura do composer.json "autoload" : { "psr-4" : { "BlueprintSdkMaker" : "src/Sdk" } }, "require" : { "php" : ">=7", "symfony/console" : "^3.2", Autoload Namespace Require
  • 56. Estrutura do composer.json "autoload" : { "psr-4" : { "BlueprintSdkMaker" : "src/Sdk" } }, "require" : { "php" : ">=7", "symfony/console" : "^3.2", Autoload Namespace Require Require dev
  • 57. Estrutura do composer.json "autoload" : { "psr-4" : { "BlueprintSdkMaker" : "src/Sdk" } }, "require" : { "php" : ">=7", "symfony/console" : "^3.2",
  • 58. Estrutura do composer.json "autoload" : { "psr-4" : { "BlueprintSdkMaker" : "src/Sdk" } }, "require" : { "php" : ">=7", "symfony/console" : "^3.2", scripts
  • 59. Estrutura do composer.json "autoload" : { "psr-4" : { "BlueprintSdkMaker" : "src/Sdk" } }, "require" : { "php" : ">=7", "symfony/console" : "^3.2", scripts Agrupando scripts
  • 60. Estrutura do composer.json "autoload" : { "psr-4" : { "BlueprintSdkMaker" : "src/Sdk" } }, "require" : { "php" : ">=7", "symfony/console" : "^3.2", scripts Binários Agrupando scripts
  • 61. Estrutura do composer.json "autoload" : { "psr-4" : { "BlueprintSdkMaker" : "src/Sdk" } }, "require" : { "php" : ">=7", "symfony/console" : "^3.2", scripts Repositórios Binários Agrupando scripts
  • 62. Estrutura do composer.json "autoload" : { "psr-4" : { "BlueprintSdkMaker" : "src/Sdk" } }, "require" : { "php" : ">=7", "symfony/console" : "^3.2", scripts Repositórios Binários Agrupando scripts Tipo de repositório
  • 63. 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.
  • 66. E se encontrar um bug? Fork, corrija e use a correção Exemplo: "repositories" : [{ "type" : "vcs", "url" : "https://github.com/vitormattos/oasis-mson-parser" } ]
  • 67. Indo para produção composer install --prefer-dist --no-dev --optimize-autoload
  • 68. Um bom caminho: boas prá http://phppackagechecklist.com
  • 69.