{"id":12572,"date":"2018-02-01T09:00:51","date_gmt":"2018-02-01T11:00:51","guid":{"rendered":"https:\/\/king.host\/blog\/?p=12572"},"modified":"2025-09-26T14:35:23","modified_gmt":"2025-09-26T17:35:23","slug":"composer-o-que-e-como-instalar-como-usar","status":"publish","type":"post","link":"https:\/\/king.host\/blog\/glossario\/composer-o-que-e-como-instalar-como-usar\/","title":{"rendered":"Introdu\u00e7\u00e3o ao Composer: o que \u00e9, como instalar, como usar."},"content":{"rendered":"<h2>O que \u00e9 o Composer?<\/h2>\n<p>O Composer \u00e9 uma ferramenta para o gerenciamento de depend\u00eancias em PHP. Ele permite que voc\u00ea declare as bibliotecas que seu projeto necessita e ele gerencia (instala \/ atualiza) elas para voc\u00ea\u00b9.<\/p>\n<p>Para quem j\u00e1 est\u00e1 familiarizado com outras linguagens como o Node, por exemplo, temos o npm que faz isso no Java, o Maven e ainda o Bundler, no Ruby. No caso do Composer do PHP, este foi fortemente inspirado pelos npm (Node) e o bundler (Ruby).<\/p>\n<p>Para quem adotou o PHP como linguagem de aprendizado deve estar se perguntando o que \u00e9 um gerenciador de depend\u00eancias. Para explicar melhor, vou iniciar explicando o que s\u00e3o depend\u00eancias de projeto.<\/p>\n<h2>O que s\u00e3o depend\u00eancias?<\/h2>\n<p>S\u00e3o todos os artefatos (bibliotecas\/ pacotes) de software ou de sistemas de terceiros que seu projeto utiliza para funcionar.<\/p>\n<h2>Para que serve o Composer?<\/h2>\n<p>Imagine que voc\u00ea tem o seu projeto e escolheu um framework, que \u00e9 a abstra\u00e7\u00e3o (captura) de funcionalidades comuns a v\u00e1rias aplica\u00e7\u00f5es. Para constru\u00e7\u00e3o deste projeto, o framework passa a ser uma biblioteca do seu sistema e, provavelmente, dependa de outras bibliotecas para funcionar. \u00c9 a\u00ed que entra o Composer fazendo sua \u201cm\u00e1gica\u201d, j\u00e1 que \u00e9 ele quem ir\u00e1 gerenciar essas bibliotecas que o seu projeto necessita.\u00a0Ou seja, com ele voc\u00ea ir\u00e1 declarar essas bibliotecas e ele, por sua vez, ir\u00e1 achar quais as vers\u00f5es delas que seu projeto necessita e ir\u00e1 instalar elas em uma pasta chamada vendor.<\/p>\n<p>A imagem\u00b2 abaixo faz uma analogia melhor de como a ferramenta funciona.<\/p>\n<p>Analisando a imagem temos o Fornecedor da Biblioteca (Library Publisher); a Biblioteca em si (Library), no caso as frutas e verduras na imagem; o Cliente (Library Consumer), Consumidor dessa biblioteca; seu projeto e o Packagist &#8211; que seria a feira com o an\u00fancio dos fornecedores, a qual entraremos com mais detalhes em outro post sobre o assunto.<\/p>\n<p>At\u00e9 aqui vimos o que \u00e9 o Composer e para que serve, agora vamos ver como instal\u00e1-lo e um exemplo simples.<\/p>\n<h2>Instalando o Composer<\/h2>\n<p>Requer o PHP na vers\u00e3o 5.3.2 ou superior para funcionar. Os passos de instala\u00e7\u00e3o da ferramenta a seguir s\u00e3o no sistema operacional Linux, caso o seu seja windows, recomendo a leitura da documenta\u00e7\u00e3o.<\/p>\n<p>H\u00e1 duas formas de instalar, vamos a elas:<\/p>\n<p><strong>Localmente<\/strong><br \/>\nInstalar localmente \u00e9 apenas uma quest\u00e3o de executar o instalador \u201ccomposer.phar\u201d no diret\u00f3rio do seu projeto. Voc\u00ea pode ver as instru\u00e7\u00f5es de download atrav\u00e9s desse <a href=\"https:\/\/getcomposer.org\/download\/\" target=\"_blank\" rel=\"noopener noreferrer\">link<\/a>\u00b3<\/p>\n<p>O <em>composer.phar<\/em> \u00e9 um bin\u00e1rio de arquivo PHP que pode ser rodado em linha de comando arquivos.phar do PHP. Eles se assemelham com arquivos .jar do Java, ou seja, uma biblioteca na qual a aplica\u00e7\u00e3o \u00e9 compilada.<\/p>\n<p>Com o <em>composer.phar<\/em> no diret\u00f3rio do seu projeto, basta rodar o comando<\/p>\n<pre id=\"dad4\" class=\"graf graf--pre graf-after--p\">$ php composer.phar\n<\/pre>\n<p><strong>Globalmente<\/strong><br \/>\nA diferen\u00e7a nessa instala\u00e7\u00e3o \u00e9 que voc\u00ea pode rodar o <em>composer.phar<\/em> de qualquer lugar que desejar. Voc\u00ea instala em um diret\u00f3rio no qual voc\u00ea possa acessar globalmente. Com isso \u00e9 poss\u00edvel execut\u00e1-lo sem precisar invocar o php<\/p>\n<h2>Usando o Composer<\/h2>\n<p>Para dar um exemplo simples, iremos fazer a instala\u00e7\u00e3o do Slim Framework. Vamos come\u00e7ar criando de diret\u00f3rio chamado teste-composer e depois acessar ele. Voc\u00ea pode criar da forma que achar melhor, abaixo listo os comandos criando a estrutura de teste em um terminal Linux.<\/p>\n<pre class=\"lang:default decode:true \">$ mkdir teste-composer<\/pre>\n<pre class=\"lang:default decode:true\">$ cd teste-composer<\/pre>\n<p>Dentro deste diret\u00f3rio, vamos criar um arquivo chamado <em>composer.json<\/em> e abrir ele com o Sublime. Para quem n\u00e3o conhece, o <a href=\"https:\/\/king.host\/blog\/2018\/01\/sublime-text-vs-phpstorm\/?utm_source=lab&amp;utm_medium=post&amp;utm_term=&amp;utm_content=post-composer&amp;utm_campaign=content-marketing\" target=\"_blank\" rel=\"noopener noreferrer\">Sublime<\/a> \u00e9 um editor de textos, um dos mais usados atualmente.<\/p>\n<pre class=\"lang:default decode:true \">$ touch composer.json\n<\/pre>\n<pre class=\"lang:default decode:true \">$ subl composer.json<\/pre>\n<p>J\u00e1 para quem est\u00e1 acostumado com Linux, pode abrir no editor Vim<\/p>\n<pre class=\"lang:default decode:true \">$ vim composer.json<\/pre>\n<p>Vamos escrever o seguinte e salvar:<\/p>\n<pre class=\"lang:default decode:true \">{\n    \"require\": {\n        \"slim\/slim\": \"^3.0\"\n    }\n}<\/pre>\n<p>Agora vamos dentro da pasta rodar o seguinte comando<\/p>\n<pre class=\"lang:default decode:true\">$ php composer.phar install<\/pre>\n<p>Essa ser\u00e1 a sa\u00edda<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter wp-image-12582 size-large\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/01\/saida-slim-composer-2-780x153.png\" alt=\"\" width=\"780\" height=\"153\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/01\/saida-slim-composer-2-780x153.png 780w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/01\/saida-slim-composer-2-300x59.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/01\/saida-slim-composer-2-768x150.png 768w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/01\/saida-slim-composer-2-1024x200.png 1024w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/01\/saida-slim-composer-2-400x78.png 400w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/01\/saida-slim-composer-2-1320x258.png 1320w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/01\/saida-slim-composer-2.png 1447w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/p>\n<p>E a estrutura de diret\u00f3rios ficar\u00e1 assim:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-12581 size-full\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/01\/saida-teste-composer.png\" alt=\"\" width=\"710\" height=\"163\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/01\/saida-teste-composer.png 710w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/01\/saida-teste-composer-300x69.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/01\/saida-teste-composer-400x92.png 400w\" sizes=\"(max-width: 710px) 100vw, 710px\" \/><\/p>\n<p>Algumas informa\u00e7\u00f5es que valem ressaltar \u00e9 que, no caso do Linux, temos que cuidar as permiss\u00f5es na hora de executar alguns comandos, no meu caso eu usei o comando sudo (permite a usu\u00e1rios comuns obter privil\u00e9gios de super usu\u00e1rio e executar tarefas administrativas permitidas apenas para o mesmo) apenas para executar o php <em>composer-setup.php<\/em>.<\/p>\n<p>Desde quando foi lan\u00e7ado, em Mar\u00e7o de 2012, o Composer vem crescendo e sendo utilizado em grande escala, isso porque ele supriu algo que o PHP n\u00e3o tinha (ou at\u00e9 tinha no caso do pear mas era dif\u00edcil de configurar), de gerenciador de depend\u00eancias. Hoje \u00e9 dif\u00edcil imaginar construir um projeto sem ele \u00e9 quase como pensar em uma tarefa suicida.<\/p>\n<p>Esse post foi apenas uma introdu\u00e7\u00e3o do que \u00e9 o Composer, mas existem muitas coisas a serem vistas e veremos mais detalhadamente algumas em futuros posts sobre.<\/p>\n<p>Rodap\u00e9 \/ Refer\u00eancias<br \/>\n[1] Tradu\u00e7\u00e3o da introdu\u00e7\u00e3o na documenta\u00e7\u00e3o do <a href=\"https:\/\/getcomposer.org\/doc\/00-intro.md\" target=\"_blank\" rel=\"noopener noreferrer\">site oficial<\/a> do Composer<br \/>\n[2] Imagem retirada da palestra do <a href=\"https:\/\/pt.slideshare.net\/rdohms\/composer-the-right-way-010php\" target=\"_blank\" rel=\"noopener noreferrer\">Rafael Dohms &#8211; <\/a>Composer The Right Way<br \/>\n[3] As instru\u00e7\u00f5es s\u00e3o da pr\u00f3pria documenta\u00e7\u00e3o do Composer e encontram-se em ingl\u00eas<\/p>\n<p>&#8212;<\/p>\n<p>Gostou do texto? Fique por dentro de outros materiais do universo <a href=\"https:\/\/king.host\/blog\/tag\/php\/\" target=\"_blank\" rel=\"noopener noreferrer\">PHP no Blog da KingHost<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O que \u00e9 o Composer? O Composer \u00e9 uma ferramenta para o gerenciamento de depend\u00eancias em PHP. Ele permite que voc\u00ea declare as bibliotecas que seu projeto necessita e ele gerencia (instala \/ atualiza) elas para voc\u00ea\u00b9. Para quem j\u00e1 est\u00e1 familiarizado com outras linguagens como o Node, por exemplo, temos o npm que faz [&hellip;]<\/p>\n","protected":false},"author":315,"featured_media":12608,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1308],"tags":[1374],"class_list":["post-12572","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-glossario","tag-php"],"_links":{"self":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/12572","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/users\/315"}],"replies":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/comments?post=12572"}],"version-history":[{"count":19,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/12572\/revisions"}],"predecessor-version":[{"id":42396,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/12572\/revisions\/42396"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media\/12608"}],"wp:attachment":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media?parent=12572"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/categories?post=12572"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/tags?post=12572"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}