{"id":163,"date":"2017-08-01T07:43:25","date_gmt":"2017-08-01T10:43:25","guid":{"rendered":"http:\/\/magenteiro.com\/blog\/?p=163"},"modified":"2021-01-28T23:43:05","modified_gmt":"2021-01-29T02:43:05","slug":"magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes","status":"publish","type":"post","link":"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/","title":{"rendered":"Magento e Composer: como gerenciar melhor seus m\u00f3dulos e pacotes"},"content":{"rendered":"\n<div class=\"wp-block-image\"><figure class=\"alignright\"><img loading=\"lazy\" width=\"300\" height=\"356\" src=\"http:\/\/magenteiro.com\/blog\/wp-content\/uploads\/2017\/07\/Logo-composer-transparent.png\" alt=\"\" class=\"wp-image-189\" srcset=\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/07\/Logo-composer-transparent.png 300w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/07\/Logo-composer-transparent-253x300.png 253w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/figure><\/div>\n\n\n\n<p><em>Composer<\/em> \u00e9 o gerenciador de depend\u00eancias mais utilizado no mundo da programa\u00e7\u00e3o moderna PHP. Ele permite declarar quais bibliotecas seu projeto precisa, e cada biblioteca por sua vez pode declarar outras depend\u00eancias, que s\u00e3o instaladas consequentemente. Com o composer ainda \u00e9 poss\u00edvel definir quais vers\u00f5es de cada biblioteca queremos usar, quais reposit\u00f3rios queremos usar na pesquisa, que tipo de <em>PSR<\/em> ser\u00e1 usado, entre outras coisas.<\/p>\n\n\n\n<p>O composer \u00e9 multi-plataforma e \u00e9 executado atrav\u00e9s de linha de comando, tipicamente atrav\u00e9s da execu\u00e7\u00e3o do arquivo <code>composer.phar<\/code><br>Se voc\u00ea ainda n\u00e3o tem ele instalado, considere fazer isso agora antes de seguir (veja <a href=\"https:\/\/getcomposer.org\/doc\/00-intro.md#installation-linux-unix-osx\" target=\"_blank\" rel=\"noopener noreferrer\">instala\u00e7\u00e3o no Linux\/OSX<\/a> ou <a href=\"https:\/\/getcomposer.org\/doc\/00-intro.md#installation-windows\" target=\"_blank\" rel=\"noopener noreferrer\">Windows<\/a>).<\/p>\n\n\n\n<h2>Hist\u00f3ria (mas voc\u00ea n\u00e3o precisa ler)<\/h2>\n\n\n\n<p>O composer nasceu em 2012, e foi criado por Nils Adermann e Jordi Boggiano, fortemente inspirados pelo <em>npm <\/em>(do Node.js) e bundler do Ruby. Quase todos os frameworks e softwares PHP fazem uso do mesmo hoje em dia. Entre os exemplos podemos destacar as vers\u00f5es atuais de: Symfony, Laravel, CodeIgniter, CakePHP, <strong>e Magento 2<\/strong>.<\/p>\n\n\n\n<h2>Magento 2?<\/h2>\n\n\n\n<p>Sim, Magento 2 usa composer como j\u00e1 falei <a href=\"http:\/\/magenteiro.com\/blog\/magento-2\/8-coisas-que-o-desenvolvedor-magento-deve-saber-sobre-magento-2\/\">nesse outro post<\/a>. E sim, tamb\u00e9m usa symfony, monolog e outras coisas nas suas depend\u00eancias, mas isso \u00e9 papo pra outro post.<\/p>\n\n\n\n<h2>E como usa?<\/h2>\n\n\n\n<p>No Magento 2 &#8211; j\u00e1 vou falar de M1, calma &#8211;&nbsp; ou em outros projetos PHP \u00e9 tudo muito simples e podemos arriscar a dizer que tudo se resume a um ou dois arquivos JSON e dois ou tr\u00eas comandos. \u00c9 claro que d\u00e1 pra fazer muito mais que isso, mas vamos come\u00e7ar por algum lugar.<\/p>\n\n\n\n<p>As depend\u00eancias de um projeto s\u00e3o definidas em um arquivo chamado <code>composer.json<\/code>, o qual vamos criar agora.<\/p>\n\n\n\n<p>Ap\u00f3s ter instalado o <em>composer<\/em>, crie um diret\u00f3rio qualquer (vazio de prefer\u00eancia), entre nele no seu terminal e digite:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ cd meuprojeto\n$ composer.phar -n init<\/pre>\n\n\n\n<p>O -n faz com que o composer entenda que estamos querendo criar&nbsp; um arquivo novo para gerenciar depend\u00eancias, e n\u00e3o definir um composer.json de um projeto. Ou seja, se voc\u00ea quiser criar o seu projeto e fornecer ele para ser usado posteriormente, use <code>composer init<\/code>, e o composer ir\u00e1 lhe fazer algumas perguntas sobre sua biblioteca.<\/p>\n\n\n\n<p>Logo em seguida, o nosso composer.json foi criado.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n\"require\": {}\n}\n<\/pre>\n\n\n\n<p>A cria\u00e7\u00e3o do <code>composer.json<\/code> \u00e9 o setup inicial do nosso projeto.&nbsp; Cada depend\u00eancia que vamos usar geralmente possu\u00ed uma forma de autoload de classes diferentes, e o composer gerencia isso pra gente. Mas para fazer isso, o pr\u00f3prio composer precisa de algumas depend\u00eancias, e \u00e9 elas que vamos instalar agora.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ composer install --no-dev\nLoading composer repositories with package information\nUpdating dependencies\nNothing to install or update\nGenerating autoload files<\/pre>\n\n\n\n<p>Nesse momento o composer criou uma pasta chamada <code>vendor<\/code> com uma s\u00e9rie de arquivos, depend\u00eancias e um arquivo chamado <code>autoload.php<\/code>. Ele \u00e9 o respons\u00e1vel por gerenciar a forma como as classes ser\u00e3o buscadas nos v\u00e1rios tipos de projetos e PSR&#8217;s que viermos a trabalhar.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">.\n|-- composer.json\n`-- vendor\n|-- autoload.php\n`-- composer\n|-- ClassLoader.php\n|-- LICENSE\n|-- autoload_classmap.php\n|-- autoload_namespaces.php\n|-- autoload_psr4.php\n|-- autoload_real.php\n|-- autoload_static.php\n`-- installed.json\n\n2 directories, 10 files<\/pre>\n\n\n\n<p>O <code>--no-dev<\/code> garante que s\u00f3 teremos o essencial. Muitos projetos tem depend\u00eancias (require-dev) que s\u00e3o usadas quando queremos trabalhar no projeto de algu\u00e9m, ou seja, modificar o projeto que estamos instalando.<br>Mas calma, n\u00e3o vai sair digitando <code>composer install<\/code> para instalar outras depend\u00eancias. Para isso vamos usar o <code>composer require<\/code>, e j\u00e1 vou falar sobre ele.<\/p>\n\n\n\n<h2>De onde v\u00eam os projetos e depend\u00eancias<\/h2>\n\n\n\n<p>A lista de bibliotecas e aplica\u00e7\u00f5es que podemos &#8220;importar&#8221; para dentro do nosso projeto s\u00e3o listadas no site <a href=\"https:\/\/packagist.org\" target=\"_blank\" rel=\"noopener noreferrer\">packagist.org<\/a>. Por padr\u00e3o, toda vez que solicitamos um pacote, \u00e9 de l\u00e1 que o composer vai buscar. Voc\u00ea pode entrar no site e buscar por qualquer tipo de utilit\u00e1rio como por exemplo, gerenciador de logs, de banco de dados, bibliotecas para manipular imagens, e qualquer outra coisa. Basicamente, todo projeto listado l\u00e1, est\u00e1 vinculado a um reposit\u00f3rio aberto como github, bitbucket, etc, e s\u00e3o atualizados no packagist automaticamente atrav\u00e9s de integra\u00e7\u00e3o via webhooks.<\/p>\n\n\n\n<p>T\u00e1, mas e da\u00ed? N\u00e3o achei quase nada de Magento l\u00e1.<br>Como disse, o Packagist, \u00e9 o reposit\u00f3rio padr\u00e3o. <strong>Para Magento 1, os m\u00f3dulos ficam em outro reposit\u00f3rio&#8230;<\/strong><\/p>\n\n\n\n<h2>Como usar o composer no Magento 1<\/h2>\n\n\n\n<p class=\"has-text-color has-background\" style=\"background-color:#ffcba5;color:#253e52\">&#x26a0;&#xfe0f; Update: O Magento Connect foi extinto pela Magento, e com isso as refer\u00eancias para <code>connect20<\/code> em packagist.firegento.com n\u00e3o s\u00e3o mais v\u00e1lidas. \u00c9 recomend\u00e1vel que se use composer com Magento 1 usando somente o packagist.org (padr\u00e3o do composer).<\/p>\n\n\n\n<p>Apesar de o Packagist ser o reposit\u00f3rio padr\u00e3o de bibliotecas, ele n\u00e3o \u00e9 o \u00fanico, e a primeira coisa que vamos fazer \u00e9 adicionar o reposit\u00f3rio do <a href=\"http:\/\/firegento.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Firegento<\/a>, que \u00e9 o reposit\u00f3rio da comunidade <em>magenteira<\/em>, criado na Alemanha.<br>A parte mais legal do Firegento, \u00e9 que al\u00e9m de m\u00f3dulos enviados especificamente para eles, voc\u00ea ainda conta com quase todos os <strong>m\u00f3dulos do Magento Connect<\/strong> e todo seu hist\u00f3rico de vers\u00f5es. Olha s\u00f3 o que eu achei l\u00e1:<br><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" src=\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/07\/Screen-Shot-2017-07-28-at-16.26.59-1024x255.png\" alt=\"\" class=\"wp-image-177\" width=\"768\" height=\"191\" srcset=\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/07\/Screen-Shot-2017-07-28-at-16.26.59-1024x255.png 1024w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/07\/Screen-Shot-2017-07-28-at-16.26.59-300x75.png 300w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/07\/Screen-Shot-2017-07-28-at-16.26.59-768x192.png 768w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/07\/Screen-Shot-2017-07-28-at-16.26.59-500x125.png 500w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/07\/Screen-Shot-2017-07-28-at-16.26.59.png 1548w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><\/figure><\/div>\n\n\n\n<h2>Bom, mas como fazer o composer enxergar Firegento e come\u00e7ar a instalar m\u00f3dulos?<\/h2>\n\n\n\n<p>Basicamente faremos isso em 3 etapas:<\/p>\n\n\n\n<ol><li>Iniciamos o composer com o Firegento<\/li><li>Carregamos nosso primeiro m\u00f3dulo<\/li><li>Fazemos o Magento 1 funcionar com composer<\/li><\/ol>\n\n\n\n<h3>1. Iniciar o composer com Firegento<\/h3>\n\n\n\n<p>Agora, j\u00e1 na pasta do nosso projeto Magento, vamos criar um arquivo composer.json com o seguinte conte\u00fado:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n    \"repositories\": [\n        {\n            \"type\": \"composer\",\n            \"url\": \"https:\/\/packages.firegento.com\"\n        }\n    ]\n}\n<\/pre>\n\n\n\n<h3>2. Instalando o primeiro m\u00f3dulo<\/h3>\n\n\n\n<p>Em seguida, vamos instalar nosso primeiro m\u00f3dulo, que pode ser encontrado no Firegento. Para fazer uma propaganda, vejamos como instalar o m\u00f3dulo do Pagseguro, listado na imagem acima:<\/p>\n\n\n\n<p><code>$ composer.phar require --update-no-dev connect20\/ricardomartins_pagseguro<\/code><\/p>\n\n\n\n<p>E veja o que acontece..<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Using version ^3.2 for connect20\/ricardomartins_pagseguro\n.\/composer.json has been updated\nLoading composer repositories with package information\nUpdating dependencies\nPackage operations: 1 install, 0 updates, 0 removals\n- Installing connect20\/ricardomartins_pagseguro (3.2.0): Downloading (100%)\nWriting lock file\nGenerating autoload files<\/pre>\n\n\n\n<p>Isso far\u00e1 o composer adicionar o PagSeguro como depend\u00eancia no nosso <code>composer.json<\/code>, criar um novo arquivo <code>composer.lock<\/code> contendo o estado atual de cada pacote instalado e sua vers\u00e3o atual, e colocar todos os m\u00f3dulos e suas depend\u00eancias na pasta <code>\/vendor<\/code>.<br>O &#8211;update-no-dev \u00e9 opcional e faz com que as depend\u00eancias sejam atualizadas sem os requisitos de desenvolvimento, assim como o nosso <code>install --no-dev<\/code> acima.<\/p>\n\n\n\n<h3>3. Fazendo o Magento funcionar com composer<\/h3>\n\n\n\n<p>O Magento 1 n\u00e3o l\u00ea a pasta \/vendor por padr\u00e3o, nem carrega o autoload.php pra gente. Para fazer isso dar certo, precisaremos de uma depend\u00eancia que altera a forma como o composer trabalha, fazendo ele duplicar os arquivos nas pastas certas.<\/p>\n\n\n\n<p>Note que alguns m\u00f3dulos j\u00e1 carregam essa depend\u00eancia no seu composer.json, n\u00e3o sendo necess\u00e1rio realizar este passo.<\/p>\n\n\n\n<p>Sendo assim se este n\u00e3o for o caso, precisamos instalar o <code>magento-hackathon\/magento-composer-installer<\/code>, e faremos isso com <code>composer require --update-no-dev magento-hackathon\/magento-composer-installer<\/code><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ composer require --update-no-dev magento-hackathon\/magento-composer-installer\n.\/composer.json has been created\nLoading composer repositories with package information\nUpdating dependencies (including require-dev)\nPackage operations: 8 installs, 0 updates, 0 removals\n- Installing psr\/log (1.0.2): Loading from cache\n- Installing symfony\/debug (v3.3.5): Loading from cache\n- Installing symfony\/polyfill-mbstring (v1.4.0): Loading from cache\n- Installing symfony\/console (v3.3.5): Loading from cache\n- Installing justinrainbow\/json-schema (4.1.0): Loading from cache\n- Installing eloquent\/enumeration (5.1.1): Loading from cache\n- Installing eloquent\/composer-config-reader (2.0.2): Loading from cache\n- Installing magento-hackathon\/magento-composer-installer (3.1.2): Loading from cache\nyou may want to add the packages.firegento.com repository to composer.\nadd it with: composer.phar config -g repositories.firegento composer https:\/\/packages.firegento.com\nsymfony\/console suggests installing symfony\/event-dispatcher ()\nsymfony\/console suggests installing symfony\/filesystem ()\nsymfony\/console suggests installing symfony\/process ()\nmagento-hackathon\/magento-composer-installer suggests installing theseer\/autoload (~1.14)\nmagento-hackathon\/magento-composer-installer suggests installing colinmollenhour\/modman (*)\nWriting lock file\nGenerating autoload files\nplease define your magento root dir [root].\nAutoloader patch to .\/app\/Mage.php was applied successfully<\/pre>\n\n\n\n<p>Isso tamb\u00e9m far\u00e1 com que o Magento passe a ler a pasta \/vendor do nosso projeto em busca de poss\u00edveis classes, alterando assim o autoload padr\u00e3o do Magento &#8211; ou seja, alterando o <code>app\/Mage.php<\/code>.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git diff app\/Mage.php\ndiff --git a\/app\/Mage.php b\/app\/Mage.php\nindex 081f5e9..3e53058 100644\n--- a\/app\/Mage.php\n+++ b\/app\/Mage.php\n@@ -53,6 +53,14 @@ if (defined('COMPILER_INCLUDE_PATH')) {\n\nVarien_Autoload::register();\n\n+\/** AUTOLOADER PATCH **\/\n+if (file_exists($autoloaderPath = BP . DS . 'vendor\/autoload.php') ||\n+ file_exists($autoloaderPath = BP . DS . '..\/vendor\/autoload.php')\n+) {\n+ require $autoloaderPath;\n+}\n+\/** AUTOLOADER PATCH **\/\n+\n\/**\n* Main Mage hub class<\/pre>\n\n\n\n<p>Note que ao ser perguntado &#8220;please define your magento root dir&#8221;, eu informei &#8220;.&#8221; (ponto), para indicar o diret\u00f3rio atual.<\/p>\n\n\n\n<p>Neste momento, o m\u00f3dulo RicardoMartins_PagSeguro, que est\u00e1 em <code>vendor\/connect20\/RicardoMartins_PagSeguro\/<\/code> foi tamb\u00e9m copiado para fora e todos os arquivos est\u00e3o l\u00e1 no seu Magento.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git status\nOn branch master\nChanges not staged for commit:\n(use \"git add ...\" to update what will be committed)\n(use \"git checkout -- ...\" to discard changes in working directory)\nmodified: app\/Mage.php\n\nUntracked files:\n(use \"git add ...\" to include in what will be committed)\n\napp\/code\/community\/RicardoMartins\/PagSeguro\/\napp\/design\/adminhtml\/base\/\napp\/design\/frontend\/base\/default\/template\/ricardomartins_pagseguro\/\napp\/etc\/modules\/RicardoMartins_PagSeguro.xml\napp\/locale\/pt_BR\/\ncomposer.json\ncomposer.lock\njs\/pagseguro\/\nskin\/frontend\/base\/default\/pagseguro\/\nvendor\/\n\nno changes added to commit (use \"git add\" and\/or \"git commit -a\")<\/pre>\n\n\n\n<p>O mesmo pode ser feito com qualquer outro m\u00f3dulo.<\/p>\n\n\n\n<h3>Habilitando links simb\u00f3licos<\/h3>\n\n\n\n<p>Por fim, habilite os links simb\u00f3licos no seu magento. Isso pode ser feito com o <a href=\"https:\/\/files.magerun.net\/\" target=\"_blank\" rel=\"noopener noreferrer\">n98-magerun<\/a>, atrav\u00e9s do comando <code>dev:symlinks<\/code>, ou modificando as configura\u00e7\u00f5es na tabela core_config_data (dev\/template\/allow_symlink).<\/p>\n\n\n\n<h2>Para desinstalar<\/h2>\n\n\n\n<p>Para desinstalar um m\u00f3dulo basta digitar <code>composer remove nome-da-dependencia<\/code>.<br>Por exemplo:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ composer remove connect20\/ricardomartins_pagseguro\nLoading composer repositories with package information\nUpdating dependencies (including require-dev)\nPackage operations: 0 installs, 0 updates, 1 removal\n- Removing connect20\/ricardomartins_pagseguro (3.2.0)\nWriting lock file\nGenerating autoload files\n.\/app\/Mage.php was already patched<\/pre>\n\n\n\n<p>Desta forma fica muito mais f\u00e1cil gerenciar seus m\u00f3dulos, n\u00e3o \u00e9 mesmo?<\/p>\n\n\n\n<h2>Para listar<\/h2>\n\n\n\n<p>Para listar as bibliotecas instaladas e suas vers\u00f5es, usamos <code>composer info<\/code>.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ composer info\nconnect20\/RicardoMartins_PagSeguro 3.2.0 PagSeguro transparente (cart\u00f5es)\neloquent\/composer-config-reader 2.0.2 A light-weight component for reading Composer configuration files.\neloquent\/enumeration 5.1.1 An enumeration implementation for PHP.\njustinrainbow\/json-schema 4.1.0 A library to validate a json schema.\nmagento-hackathon\/magento-composer-installer 3.0.7 Composer installer for Magento modules\npsr\/log 1.0.2 Common interface for logging libraries\nsymfony\/console v3.3.5 Symfony Console Component\nsymfony\/debug v3.3.5 Symfony Debug Component\nsymfony\/polyfill-mbstring v1.4.0 Symfony polyfill for the Mbstring extension<\/pre>\n\n\n\n<h2>Alternativas<\/h2>\n\n\n\n<p>Se voc\u00ea n\u00e3o gostou das vantagens do composer, talvez goste do <a href=\"https:\/\/github.com\/colinmollenhour\/modman\/\" target=\"_blank\" rel=\"noopener noreferrer\">modman<\/a>.<\/p>\n\n\n\n<p>E se quiser ver outras ferramentas legais para desenvolver em Magento, talvez goste do curso gratuito <a href=\"https:\/\/www.magenteiro.com\/ferramentas-e-dicas-matadoras-para-o-desenvolvimento-magento\">Ferramentas e Dicas para Desenvolvimento Magento<\/a>.<\/p>\n\n\n\n<p>Gostou? Compartilhe! \ud83d\ude42<\/p>\n\n\n\n<p><span style=\"font-size: 10pt;\"><strong>Fontes e refer\u00eancias<\/strong>:<\/span><br><span style=\"font-size: 10pt;\"><a href=\"http:\/\/firegento.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Site do Firegento<\/a><\/span><br><span style=\"font-size: 10pt;\"><a href=\"https:\/\/packagist.org\/about\" target=\"_blank\" rel=\"noopener noreferrer\">Sobre o Packagist<\/a><\/span><br><span style=\"font-size: 10pt;\"><a href=\"https:\/\/en.wikipedia.org\/wiki\/Composer_(software)\" target=\"_blank\" rel=\"noopener noreferrer\">Wikipedia sobre Composer<\/a><\/span><br><span style=\"font-size: 10pt;\"><a href=\"https:\/\/getcomposer.org\/doc\/00-intro.md\" target=\"_blank\" rel=\"noopener noreferrer\">Documenta\u00e7\u00e3o do Composer<\/a><\/span><br><span style=\"font-size: 10pt;\"><a href=\"http:\/\/alanstorm.com\/php_composer_magento_tutorial\/\" target=\"_blank\" rel=\"noopener noreferrer\">Post do Alan Storm sobre composer<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"Composer \u00e9 o gerenciador de depend\u00eancias mais utilizado no mundo da programa\u00e7\u00e3o moderna PHP. Ele permite declarar quais bibliotecas seu [&hellip;]","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[7,2,24],"tags":[118,38,75,3,82,37],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v19.0 (Yoast SEO v19.4) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Magento e Composer: como gerenciar melhor seus m\u00f3dulos e pacotes<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Magento e Composer: como gerenciar melhor seus m\u00f3dulos e pacotes\" \/>\n<meta property=\"og:description\" content=\"Composer \u00e9 o gerenciador de depend\u00eancias mais utilizado no mundo da programa\u00e7\u00e3o moderna PHP. Ele permite declarar quais bibliotecas seu [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/\" \/>\n<meta property=\"og:site_name\" content=\"Magenteiro | V\u00eddeos, Artigos, e Cursos Magento 2 e Magento 1\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/magenteiro\" \/>\n<meta property=\"article:published_time\" content=\"2017-08-01T10:43:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-01-29T02:43:05+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/magenteiro.com\/blog\/wp-content\/uploads\/2017\/07\/Logo-composer-transparent.png\" \/>\n<meta name=\"author\" content=\"Ricardo Martins\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@magenteiro\" \/>\n<meta name=\"twitter:site\" content=\"@magenteiro\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ricardo Martins\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#organization\",\"name\":\"Magenteiro\",\"url\":\"https:\/\/www.magenteiro.com\/blog\/\",\"sameAs\":[\"https:\/\/www.instagram.com\/magenteiro\",\"https:\/\/www.linkedin.com\/company\/magenteiro\",\"https:\/\/www.youtube.com\/magenteiro\",\"https:\/\/facebook.com\/magenteiro\",\"https:\/\/twitter.com\/magenteiro\"],\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/04\/logo-white.png\",\"contentUrl\":\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/04\/logo-white.png\",\"width\":787,\"height\":149,\"caption\":\"Magenteiro\"},\"image\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#website\",\"url\":\"https:\/\/www.magenteiro.com\/blog\/\",\"name\":\"Magenteiro | V\u00eddeos, Artigos, e Cursos Magento 2 e Magento 1\",\"description\":\"Artigos t\u00e9cnicos, tutoriais e muitos v\u00eddeos e cursos sobre Magento. Aqui voc\u00ea encontra dicas para lojistas e desenvolvedores feitos por quem entende do assunto.\",\"publisher\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.magenteiro.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/\",\"url\":\"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/\",\"name\":\"Magento e Composer: como gerenciar melhor seus m\u00f3dulos e pacotes\",\"isPartOf\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#website\"},\"datePublished\":\"2017-08-01T10:43:25+00:00\",\"dateModified\":\"2021-01-29T02:43:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.magenteiro.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Magento e Composer: como gerenciar melhor seus m\u00f3dulos e pacotes\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/\"},\"author\":{\"name\":\"Ricardo Martins\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/e90c4bb268e5f2dad10d7c9760d4f150\"},\"headline\":\"Magento e Composer: como gerenciar melhor seus m\u00f3dulos e pacotes\",\"datePublished\":\"2017-08-01T10:43:25+00:00\",\"dateModified\":\"2021-01-29T02:43:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/\"},\"wordCount\":1287,\"commentCount\":12,\"publisher\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#organization\"},\"keywords\":[\"Avan\u00e7ado\",\"boas pr\u00e1ticas\",\"composer\",\"desenvolvimento\",\"dicas\",\"m\u00f3dulos\"],\"articleSection\":[\"Desenvolvimento\",\"Magento 1\",\"Para Magenteiros\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/#respond\"]}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/e90c4bb268e5f2dad10d7c9760d4f150\",\"name\":\"Ricardo Martins\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ae5800c87c4e0f6a4a6b7a3d66aae138?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ae5800c87c4e0f6a4a6b7a3d66aae138?s=96&d=mm&r=g\",\"caption\":\"Ricardo Martins\"},\"description\":\"\u00c9 desenvolvedor web h\u00e1 16 anos e um dos primeiros certificados pela Magento no Brasil. Instrutor de mais de 11 cursos Magento (os principais no magenteiro.com\/cursos) com mais de 14 mil alunos de 105 pa\u00edses, \u00e9 tamb\u00e9m criador do m\u00f3dulo PagSeguro Transparente, usado em mais de 12 mil lojas.\",\"sameAs\":[\"https:\/\/www.magenteiro.com\/\"],\"url\":\"https:\/\/www.magenteiro.com\/blog\/author\/ricardomartins\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Magento e Composer: como gerenciar melhor seus m\u00f3dulos e pacotes","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/","og_locale":"pt_BR","og_type":"article","og_title":"Magento e Composer: como gerenciar melhor seus m\u00f3dulos e pacotes","og_description":"Composer \u00e9 o gerenciador de depend\u00eancias mais utilizado no mundo da programa\u00e7\u00e3o moderna PHP. Ele permite declarar quais bibliotecas seu [&hellip;]","og_url":"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/","og_site_name":"Magenteiro | V\u00eddeos, Artigos, e Cursos Magento 2 e Magento 1","article_publisher":"https:\/\/facebook.com\/magenteiro","article_published_time":"2017-08-01T10:43:25+00:00","article_modified_time":"2021-01-29T02:43:05+00:00","og_image":[{"url":"http:\/\/magenteiro.com\/blog\/wp-content\/uploads\/2017\/07\/Logo-composer-transparent.png"}],"author":"Ricardo Martins","twitter_card":"summary_large_image","twitter_creator":"@magenteiro","twitter_site":"@magenteiro","twitter_misc":{"Written by":"Ricardo Martins","Est. reading time":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/www.magenteiro.com\/blog\/#organization","name":"Magenteiro","url":"https:\/\/www.magenteiro.com\/blog\/","sameAs":["https:\/\/www.instagram.com\/magenteiro","https:\/\/www.linkedin.com\/company\/magenteiro","https:\/\/www.youtube.com\/magenteiro","https:\/\/facebook.com\/magenteiro","https:\/\/twitter.com\/magenteiro"],"logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.magenteiro.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/04\/logo-white.png","contentUrl":"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/04\/logo-white.png","width":787,"height":149,"caption":"Magenteiro"},"image":{"@id":"https:\/\/www.magenteiro.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"WebSite","@id":"https:\/\/www.magenteiro.com\/blog\/#website","url":"https:\/\/www.magenteiro.com\/blog\/","name":"Magenteiro | V\u00eddeos, Artigos, e Cursos Magento 2 e Magento 1","description":"Artigos t\u00e9cnicos, tutoriais e muitos v\u00eddeos e cursos sobre Magento. Aqui voc\u00ea encontra dicas para lojistas e desenvolvedores feitos por quem entende do assunto.","publisher":{"@id":"https:\/\/www.magenteiro.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.magenteiro.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/","url":"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/","name":"Magento e Composer: como gerenciar melhor seus m\u00f3dulos e pacotes","isPartOf":{"@id":"https:\/\/www.magenteiro.com\/blog\/#website"},"datePublished":"2017-08-01T10:43:25+00:00","dateModified":"2021-01-29T02:43:05+00:00","breadcrumb":{"@id":"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.magenteiro.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Magento e Composer: como gerenciar melhor seus m\u00f3dulos e pacotes"}]},{"@type":"Article","@id":"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/#article","isPartOf":{"@id":"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/"},"author":{"name":"Ricardo Martins","@id":"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/e90c4bb268e5f2dad10d7c9760d4f150"},"headline":"Magento e Composer: como gerenciar melhor seus m\u00f3dulos e pacotes","datePublished":"2017-08-01T10:43:25+00:00","dateModified":"2021-01-29T02:43:05+00:00","mainEntityOfPage":{"@id":"https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/"},"wordCount":1287,"commentCount":12,"publisher":{"@id":"https:\/\/www.magenteiro.com\/blog\/#organization"},"keywords":["Avan\u00e7ado","boas pr\u00e1ticas","composer","desenvolvimento","dicas","m\u00f3dulos"],"articleSection":["Desenvolvimento","Magento 1","Para Magenteiros"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.magenteiro.com\/blog\/magento-1\/magento-e-composer-como-gerenciar-melhor-seus-modulos-e-pacotes\/#respond"]}]},{"@type":"Person","@id":"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/e90c4bb268e5f2dad10d7c9760d4f150","name":"Ricardo Martins","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ae5800c87c4e0f6a4a6b7a3d66aae138?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ae5800c87c4e0f6a4a6b7a3d66aae138?s=96&d=mm&r=g","caption":"Ricardo Martins"},"description":"\u00c9 desenvolvedor web h\u00e1 16 anos e um dos primeiros certificados pela Magento no Brasil. Instrutor de mais de 11 cursos Magento (os principais no magenteiro.com\/cursos) com mais de 14 mil alunos de 105 pa\u00edses, \u00e9 tamb\u00e9m criador do m\u00f3dulo PagSeguro Transparente, usado em mais de 12 mil lojas.","sameAs":["https:\/\/www.magenteiro.com\/"],"url":"https:\/\/www.magenteiro.com\/blog\/author\/ricardomartins\/"}]}},"_links":{"self":[{"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/posts\/163"}],"collection":[{"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/comments?post=163"}],"version-history":[{"count":4,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/posts\/163\/revisions"}],"predecessor-version":[{"id":2942,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/posts\/163\/revisions\/2942"}],"wp:attachment":[{"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/media?parent=163"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/categories?post=163"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/tags?post=163"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}