SlideShare a Scribd company logo
1 of 47
Download to read offline
Composer
Dependency 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 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
<?php
use CocurSlugifySlugify;
require_once 'vendor/autoload.php';
if(file_exists('.env')) {
$dotenv = new DotenvDotenv(__DIR__);
$dotenv->load();
}
echo getenv('TESTE');
echo "n";
$string = 'Minicurso Composer!';
$slug = new Slugify();
echo $slug->slugify($string);
echo "n";
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
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.json
Exemplo:
Phpunit, blueprint-sdk-maker
Indo para produção
composer install --prefer-dist --no-dev --optimize-autoload
Um bom caminho
http://phppackagechecklist.com
Perguntas
vitor.mattos@phprio.org
linkedin.com/in/vitormattos

More Related Content

What's hot

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
 
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
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHPFlávio Lisboa
 
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
 
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
 
A Evolução do PHP - A Linguagem Número 1 da Web - PHP Conference Brasil 2013
A Evolução do PHP - A Linguagem Número 1 da Web - PHP Conference Brasil 2013A Evolução do PHP - A Linguagem Número 1 da Web - PHP Conference Brasil 2013
A Evolução do PHP - A Linguagem Número 1 da Web - PHP Conference Brasil 2013Evaldo Junior
 
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
 
Entendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHPEntendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHPAdler Medrado
 
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
 
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
 
Desenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software LivreDesenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software Livreelliando dias
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHPFlávio Lisboa
 
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 ser-um-programador-melhor
Como ser-um-programador-melhorComo ser-um-programador-melhor
Como ser-um-programador-melhorMarcos Paulo
 
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"
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonIgor Sobreira
 

What's hot (20)

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
 
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
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHP
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework Laminas
 
PHP: Evolução
PHP: EvoluçãoPHP: Evolução
PHP: Evolução
 
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...
 
A Evolução do PHP - A Linguagem Número 1 da Web - PHP Conference Brasil 2013
A Evolução do PHP - A Linguagem Número 1 da Web - PHP Conference Brasil 2013A Evolução do PHP - A Linguagem Número 1 da Web - PHP Conference Brasil 2013
A Evolução do PHP - A Linguagem Número 1 da Web - PHP Conference Brasil 2013
 
Frameworks PHP
Frameworks PHPFrameworks PHP
Frameworks PHP
 
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
 
Entendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHPEntendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com 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
 
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
 
Desenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software LivreDesenvolvendo Aplicações com Software Livre
Desenvolvendo Aplicações com Software Livre
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em 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
 
Como ser-um-programador-melhor
Como ser-um-programador-melhorComo ser-um-programador-melhor
Como ser-um-programador-melhor
 
Desenvolvimento Mobile Web usando PHP
Desenvolvimento Mobile Web usando PHPDesenvolvimento Mobile Web usando PHP
Desenvolvimento Mobile Web usando PHP
 
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
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 

Similar to Composer Dependency

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
 
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
 
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
 
Web Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to LaravelWeb Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to LaravelMozDevz
 
Interoperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeInteroperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeAlessandro Binhara
 
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
 
Frameworks de Desenvolvimento Web com PHP
Frameworks de Desenvolvimento Web com PHPFrameworks de Desenvolvimento Web com PHP
Frameworks de Desenvolvimento Web com PHPElton Minetto
 
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
 
Apostila php
Apostila phpApostila php
Apostila phpmurilocbs
 
Apostila php
Apostila phpApostila php
Apostila phpkoldm2
 
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
 
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...Renato Groff
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteMichael Cardoso
 

Similar to Composer Dependency (20)

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
 
WP Composer
WP ComposerWP Composer
WP Composer
 
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
 
Iniciando com django
Iniciando com djangoIniciando com django
Iniciando com django
 
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
 
Web Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to LaravelWeb Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to Laravel
 
Mastering Laravel
Mastering LaravelMastering Laravel
Mastering Laravel
 
Interoperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeInteroperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente Mainframe
 
Palestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPressPalestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPress
 
Frameworks de Desenvolvimento Web com PHP
Frameworks de Desenvolvimento Web com PHPFrameworks de Desenvolvimento Web com PHP
Frameworks de Desenvolvimento Web com PHP
 
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
 
Php do Jeito Certo
Php do Jeito CertoPhp do Jeito Certo
Php do Jeito Certo
 
Apostila php
Apostila phpApostila php
Apostila php
 
Apostila php
Apostila phpApostila php
Apostila php
 
Apostila php
Apostila phpApostila php
Apostila php
 
Apostila php
Apostila phpApostila php
Apostila php
 
Apostila php
Apostila phpApostila php
Apostila php
 
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
 
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil Competente
 

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