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

Composer dependency manager - TDC - POA 2017

  • 1.
  • 2.
  • 4.
    Desenvolvedor PHP desde2003 Amante de opensource Evangelista PHP PHP Zend Certified Engineer ( ZEND024235 ) PHPRio ( https://telegram.me/phprio ) Redes sociais: ( procure por vitormattos ) Quem sou eu?
  • 5.
  • 6.
  • 7.
    Roteiro ● Introdução ebreve 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
  • 8.
  • 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ãodependê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 dehistó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
  • 15.
  • 16.
  • 17.
  • 18.
    Partes envolvidas consumidor dalib lib Mantenedor da lib
  • 19.
    Partes envolvidas consumidor dalib lib Mantenedor da lib Packagist
  • 20.
    Partes envolvidas consumidor dalib 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 - estruturabásica - sua partitura { "require": { "vlucas/phpdotenv": "^2.4" } }
  • 28.
    Instalando a primeiradependência Crie um arquivo composer.json e coloque a sua dependência nele: { "require": { "vlucas/phpdotenv": "^2.4" } }
  • 29.
    Instalando a primeiradependência Crie um arquivo composer.json e coloque a sua dependência nele: { "require": { "vlucas/phpdotenv": "^2.4" } }
  • 30.
    Instalando a primeiradependência composer require <maintainer>/<dependency> Exemplo:
  • 31.
    O que aconteceapó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
  • 32.
  • 33.
  • 34.
    composer.lock Fixa as versõesa 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 Paraambiente de desenvolvimento: composer install Para ambiente de produção: composer install --no-dev Exemplo: composer require phpunit/phpunit --dev
  • 37.
  • 38.
  • 39.
  • 40.
  • 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? Instalarsempre, atualizar apenas quando necessitar atualizar a versão das dependências
  • 43.
  • 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 - CommandEvents ● 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.
  • 64.
  • 65.
  • 66.
    E se encontrarum 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 composerinstall --prefer-dist --no-dev --optimize-autoload
  • 68.
    Um bom caminho:boas prá http://phppackagechecklist.com
  • 70.