Slide 1

Slide 1 text

Dominando o Composer Marcos Marcolin

Slide 2

Slide 2 text

Tópicos ● O que é Composer? ● Utilização ● Dependências ● Schema composer.json ● Repositórios públicos e privados ● Packagist ● Publicação de pacotes públicos e privados

Slide 3

Slide 3 text

O que é Composer? Inspirado no npm do Node e no Bundler do Ruby, o Composer foi desenvolvido por Nils Adermann e Jordi Boggiano e foi lançado no ano de 2012 sobre a licença MIT.

Slide 4

Slide 4 text

O que é Composer? O Composer é uma ferramenta para gerenciamento de dependências em PHP. Ele permite que você declare as bibliotecas(códigos reutilizáveis) das quais seu projeto depende e as gerenciará (instalará/atualizará) para você.

Slide 5

Slide 5 text

Requisitos do sistema ● Última versão: PHP >= 7.2.5 ● Versão mínima: PHP >= 5.3.2 ● Windows, Linux ou macOS

Slide 6

Slide 6 text

Instalação ● Manual ○ Instruções: https://getcomposer.org/download/ ● Docker ○ Imagem: https://hub.docker.com/r/composer/composer

Slide 7

Slide 7 text

Uso básico ● composer.json ○ Controla as dependências ○ Recomendado estar no diretório raíz do projeto ○ Para publicar no Packagist, é obrigatório atender o item anterior.

Slide 8

Slide 8 text

Uso básico ● Chave require

Slide 9

Slide 9 text

Nomes dos pacotes ● Para evitar duplicação: ○ marcosmarcolin/json ○ joaomaria/json ● phpunit/phpunit ● monorepo/monorepo

Slide 10

Slide 10 text

Restrições de versão do pacote

Slide 11

Slide 11 text

Instalação das dependências ● composer update ○ Resolve as dependências e grava todas no arquivo composer.lock. ● composer install ○ Faz o download das dependências para a pasta vendor.

Slide 12

Slide 12 text

Instalação das dependências ● Faça commit do composer.lock ○ Versionar este arquivo é importante porque fará com que qualquer pessoa que configure o projeto use exatamente as mesmas versões das dependências que você está usando.

Slide 13

Slide 13 text

Atualizando dependências

Slide 14

Slide 14 text

Exigindo dependência

Slide 15

Slide 15 text

Removendo dependência

Slide 16

Slide 16 text

Carregamento das dependências

Slide 17

Slide 17 text

Adicionando seu próprio autoload

Slide 18

Slide 18 text

Adicionando seu próprio autoload ● composer dump-autoload ○ Geração do arquivo vendor/autoload.php.

Slide 19

Slide 19 text

Dúvida: Porque o PHP não encontra meu pacote?

Slide 20

Slide 20 text

Principais comandos

Slide 21

Slide 21 text

composer init ● Criação do composer.json de forma interativa. ○ Nome ○ Descrição ○ Licença ○ Autor(es) ○ Etc. ● https://getcomposer.org/doc/03-cli.md#init

Slide 22

Slide 22 text

composer install ● Lê o arquivo composer.json do diretório atual, resolve as dependências e as instala. ○ --dev ○ --no-dev ○ --no-autoloader ○ --no-progress ○ etc. ● https://getcomposer.org/doc/03-cli.md#install-i

Slide 23

Slide 23 text

composer update ● Resolverá as dependências do composer.lock e poderá fazer: ○ Upgrade ○ Downgrade ○ Options: --dev, --no-dev, --dry-run, etc. ● https://getcomposer.org/doc/03-cli.md#update-u

Slide 24

Slide 24 text

composer require ● Adicionar nova dependência. ○ Options: --dev, --dry-run, --prefer-stable, etc. ● https://getcomposer.org/doc/03-cli.md#require-r

Slide 25

Slide 25 text

composer remove ● Remove uma determinada dependência: ● https://getcomposer.org/doc/03-cli.md#remove

Slide 26

Slide 26 text

composer reinstall ● Remove a dependência e instala novamente. ● https://getcomposer.org/doc/03-cli.md#reinstall

Slide 27

Slide 27 text

Schema composer.json

Slide 28

Slide 28 text

description ● Uma breve descrição do pacote. Normalmente, esta é uma linha longa. Necessário para pacotes publicados (bibliotecas). ● https://getcomposer.org/doc/04-schema.md#description

Slide 29

Slide 29 text

version ● A versão do pacote. Na maioria dos casos, isso não é necessário e deve ser omitido. ● Exemplos: ○ 1.0.0 ○ 1.0.2 ○ 1.1.0 ○ 1.0.0-alpha3 ○ 1.0.0-beta2 ○ 1.0.0-RC5 ● https://getcomposer.org/doc/04-schema.md#version

Slide 30

Slide 30 text

type ● The type of the package. It defaults to library. ○ library ○ project ○ metapackage ○ composer-plugin ● https://getcomposer.org/doc/04-schema.md#type

Slide 31

Slide 31 text

keywords ● Uma matriz de palavras-chave às quais o pacote está relacionado. Estes podem ser usados para pesquisa e filtragem. ● Exemplo: ○ logging ○ database ○ templating ● https://getcomposer.org/doc/04-schema.md#keywords

Slide 32

Slide 32 text

license ● A licença do pacote. Isso pode ser uma string ou uma matriz de strings. ● Exemplo: ○ Apache-2.0 ○ BSD-2-Clause - BSD-3-Clause - BSD-4-Clause ○ GPL-2.0-only / GPL-2.0-or-later - GPL-3.0-only / GPL-3.0-or-later ○ LGPL-2.1-only / LGPL-2.1-or-later - LGPL-3.0-only / LGPL-3.0-or-later ○ MIT ● https://getcomposer.org/doc/04-schema.md#license

Slide 33

Slide 33 text

authors https://getcomposer.org/doc/04- schema.md#authors

Slide 34

Slide 34 text

require https://getcomposer.org/doc/04- schema.md#package-links

Slide 35

Slide 35 text

autoload PSR-4 https://getcomposer.org/doc/04- schema.md#package-links

Slide 36

Slide 36 text

classmap https://getcomposer.org/doc/04schema.md#classmap

Slide 37

Slide 37 text

files https://getcomposer.org/doc/04- schema.md#files

Slide 38

Slide 38 text

Outros ● funding ● suggest ● minimum-stability ● prefer-stable ● scripts ● abandoned, etc. ● https://getcomposer.org/doc/04-schema.md#json-schema

Slide 39

Slide 39 text

Scripts

Slide 40

Slide 40 text

O que são scripts? Um script, nos termos do Composer, pode ser um retorno de chamada PHP (definido como um método estático) ou qualquer comando executável de linha de comando. Os scripts são úteis para executar o código personalizado de um pacote ou comandos específicos do pacote durante o processo de execução do Composer.

Slide 41

Slide 41 text

Command Eventos ● pre-install-cmd: ocorre antes que o comando de instalação seja executado com um arquivo de bloqueio presente. ● post-install-cmd: ocorre após o comando de instalação ter sido executado com um arquivo de bloqueio presente. ● pre-update-cmd: ocorre antes que o comando de atualização seja executado ou antes que o comando de instalação seja executado sem um arquivo de bloqueio presente. ● post-update-cmd: ocorre após a execução do comando de atualização ou após a execução do comando de instalação sem a presença de um arquivo de bloqueio. ● etc. ● https://getcomposer.org/doc/articles/scripts.md#event-names

Slide 42

Slide 42 text

Eventos ● Exemplo:

Slide 43

Slide 43 text

Eventos ● Exemplo: ○ composer cs-check ○ composer release ○ composer changelog

Slide 44

Slide 44 text

Eventos

Slide 45

Slide 45 text

Outros eventos ● Installer Events ○ https://getcomposer.org/doc/articles/scripts.md#installer-events ● Package Events ○ https://getcomposer.org/doc/articles/scripts.md#package-events ● Plugin Events ○ https://getcomposer.org/doc/articles/scripts.md#plugin-events

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

Dúvida: Preciso alterar um pacote de terceiro, como devo proceder?

Slide 48

Slide 48 text

Alteração em pacote de terceiros ● Pasta vendor é apenas para leitura, é desencorajado o seu versionamento. ● Contribuição ao pacote: ○ Correção de falhas; ○ Implementação de novos testes; ○ Nova funcionalidades; ○ Etc. ● Pull Request para GitHub ou Merge Request para GitLab. ● Sua alteração pode ser aceita ou não. ● Fork.

Slide 49

Slide 49 text

Conflito de dependências

Slide 50

Slide 50 text

Como escolher o melhor pacote?

Slide 51

Slide 51 text

Dúvida: Qual a relação do docker-compose com o composer?

Slide 52

Slide 52 text

Docker ● O Docker é uma plataforma open source que facilita a criação e administração de ambientes isolados. Ele possibilita o empacotamento de uma aplicação ou ambiente dentro de um container, se tornando portátil para qualquer outro host que contenha o Docker instalado. ● No final das contas: o que é o Docker e como ele funciona? | Blog TreinaWeb

Slide 53

Slide 53 text

Docker ● De forma bem resumida, podemos dizer que o Docker é uma plataforma aberta, criada com o objetivo de facilitar o desenvolvimento, a implantação e a execução de aplicações em ambientes isolados. Foi desenhada especialmente para disponibilizar uma aplicação da forma mais rápida possível. ● O que é Docker

Slide 54

Slide 54 text

Docker ● O Docker tem como objetivo criar, testar e implementar aplicações em um ambiente separado da máquina original, chamado de container. Dessa forma, o desenvolvedor consegue empacotar o software de maneira padronizada. ● Docker | O que é Docker, o que são Containers e como isolar ambientes?

Slide 55

Slide 55 text

Docker vs VM

Slide 56

Slide 56 text

Docker-compose ● Docker Compose é o orquestrador de containers da Docker. E como funciona um orquestrador em uma orquestra? Ele rege como uma banda deve se comportar/tocar durante uma determinada apresentação ou música. ● Com o Docker Compose é a mesma coisa, mas os maestros somos nós! Nós iremos reger esse comportamento através do arquivo chamado docker-compose, semelhante ao Dockerfile, escrito em YAML. ● Docker Compose: O que é? Para que serve? O que come? | iMasters

Slide 57

Slide 57 text

Docker-compose ● O Docker Compose é utilizado justamente para facilitar o provisionamento e gerenciamento de multi-contêineres principalmente em ambientes de desenvolvimento, testes automatizados ou cenários de execução em um único host. ● Docker Compose - Explicado - Blog 4Linux

Slide 58

Slide 58 text

Docker-compose ● docker-compose up: cria e inicia os contêineres; ● docker-compose build: realiza apenas a etapa de build das imagens que serão utilizadas; ● docker-compose logs: visualizar os logs dos contêineres; ● docker-compose restart: reinicia os contêineres; ● docker-compose ps: lista os contêineres; ● docker-compose scale: permite aumentar o número de réplicas de um contêiner; ● docker-compose start: inicia os contêineres; ● docker-compose stop: paralisa os contêineres; ● docker-compose down: paralisa e remove todos os contêineres e seus componentes como rede, imagem e volume.

Slide 59

Slide 59 text

Docker + Docker-compose + Composer

Slide 60

Slide 60 text

Docker + Docker-compose + Composer

Slide 61

Slide 61 text

Docker + Docker-compose + Composer

Slide 62

Slide 62 text

Repositórios

Slide 63

Slide 63 text

O que são repositórios? Um repositório é uma fonte de pacote. É uma lista de pacotes/versões. O Composer irá procurar em todos os seus repositórios para encontrar os pacotes que seu projeto requer. Por padrão, apenas o repositório Packagist.org é registrado no Composer. Você pode adicionar mais repositórios ao seu projeto declarando-os em composer.json.

Slide 64

Slide 64 text

O que são repositórios?

Slide 65

Slide 65 text

Packagist Packagist é o repositório principal do Composer. Ele agrega pacotes PHP públicos instaláveis com o Composer. https://packagist.org

Slide 66

Slide 66 text

Packagist

Slide 67

Slide 67 text

Packagist

Slide 68

Slide 68 text

Packagist

Slide 69

Slide 69 text

Dúvida: O que é necessário para publicar um pacote?

Slide 70

Slide 70 text

Publicação de pacotes ● Versionamento(git, svn, etc.) ● Código-fonte + composer.json ● Lançamento de tag ● Publicação ● Instalação

Slide 71

Slide 71 text

Onde publicar ● Packagist ● Private Packagist ● GitHub ● GitLab ● BitBucket ● Etc.

Slide 72

Slide 72 text

Entendendo o processo de publicação ● https://whimsical.com/publish-package-4kuoVEP6CJYugpbFetjED6

Slide 73

Slide 73 text

Contribua

Slide 74

Slide 74 text

Referências ● https://getcomposer.org ● https://packagist.org ● https://www.treinaweb.com.br/blog/no-final-das-contas-o-que-e-o-docker-e-como-ele-fun ciona ● https://stack.desenvolvedor.expert/appendix/docker/oquee.html ● https://www.opservices.com.br/o-que-e-docker/ ● https://4linux.com.br/diferenca-containers-maquinas-virtuais/ ● https://imasters.com.br/banco-de-dados/docker-compose-o-que-e-para-que-serve-o-que- come

Slide 75

Slide 75 text

Obrigado!

Slide 76

Slide 76 text

No content