{"id":3320,"date":"2022-02-09T01:28:24","date_gmt":"2022-02-09T04:28:24","guid":{"rendered":"https:\/\/www.magenteiro.com\/blog\/?p=3320"},"modified":"2022-02-24T18:41:06","modified_gmt":"2022-02-24T21:41:06","slug":"composer-um-jeito-simples-de-entender","status":"publish","type":"post","link":"https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/","title":{"rendered":"Composer: um jeito simples de entender"},"content":{"rendered":"\n<p><strong>Composer<\/strong> \u00e9 o gerenciador de pacotes e depend\u00eancias mais utilizado no mundo PHP. <\/p>\n\n\n\n<p>Ele \u00e9 um pouco mais novo que o nosso Magento. Seu primeiro release aconteceu em 2012.<\/p>\n\n\n\n<p>Neste r\u00e1pido artigo, lhe ajudarei a entender o b\u00e1sico sobre esta ferramenta e para que servem os arquivos composer.json e composer.lock. Eles est\u00e3o presentes na pasta raiz de quase todo projeto que o utiliza.<\/p>\n\n\n<div class=\"wp-block-yoast-seo-table-of-contents yoast-table-of-contents\">\n<p><strong>Navega\u00e7\u00e3o r\u00e1pida<\/strong><\/p>\n<ul>\n<li><a href=\"#h-porque-usar-o-composer\" data-level=\"2\">Porque usar o composer<\/a><\/li>\n<li><a href=\"#h-instala-o-do-composer\" data-level=\"2\">Instala\u00e7\u00e3o do composer<\/a>\n<ul>\n<li><a href=\"#h-atualiza-o\" data-level=\"3\">Atualiza\u00e7\u00e3o do composer<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#h-o-come-o-composer-require\" data-level=\"2\">O come\u00e7o &#8211; composer require<\/a>\n<ul>\n<li><a href=\"#h-testando-nosso-monolog-e-salvando-um-arquivo-de-log\" data-level=\"3\">Testando nosso monolog e salvando um arquivo de log<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#h-os-principais-arquivos-do-composer\" data-level=\"2\">Os principais arquivos do composer<\/a>\n<ul>\n<li><a href=\"#h-composer-json\" data-level=\"3\">composer.json<\/a><\/li>\n<li><a href=\"#h-composer-lock\" data-level=\"3\">composer.lock<\/a><\/li>\n<li><a href=\"#h-pasta-vendor\" data-level=\"3\">Pasta \/vendor<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#h-o-que-versionar\" data-level=\"2\">O que versionar<\/a><\/li>\n<li><a href=\"#h-depend-ncias-suas-vers-es-e-constraints\" data-level=\"2\">Depend\u00eancias, suas vers\u00f5es e constraints<\/a>\n<ul>\n<li><a href=\"#h-semantic-versioning\" data-level=\"3\">Semantic versioning<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#h-o-composer-do-magento\" data-level=\"2\">O composer do Magento<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n<h2 id=\"h-porque-usar-o-composer\">Porque usar o composer<\/h2>\n\n\n\n<p>Apesar de ser mais lento que muitos gerenciadores de pacotes de outras linguagens, o <a href=\"https:\/\/getcomposer.org\/\">composer<\/a> abre a porta para sermos muitos mais \u00e1geis no desenvolvimento e entrega de projetos. Note que a lentid\u00e3o a qual me refiro \u00e9 apenas na sua execu\u00e7\u00e3o em busca de depend\u00eancias e atualiza\u00e7\u00f5es, mas n\u00e3o na sua implementa\u00e7\u00e3o ou execu\u00e7\u00e3o de suas depend\u00eancias.<\/p>\n\n\n\n<p>O <a href=\"https:\/\/packagist.org\/\">Packagist.org<\/a> por exemplo, \u00e9 o reposit\u00f3rio padr\u00e3o do <em>composer<\/em>. L\u00e1 podemos encontrar <strong>mais de 300.000 m\u00f3dulos, bibliotecas, frameworks e sistemas prontos para uso<\/strong>. A maioria gratuito e de c\u00f3digo aberto.<\/p>\n\n\n\n<p>O <em>composer<\/em> se encarregar\u00e1 de padronizar e lidar com os diferentes tipos de padr\u00f5es de classes, e baixar eventuais depend\u00eancias de cada projeto. Al\u00e9m disso, ele tamb\u00e9m se encarrega de verificar a compatibilidade entre as depend\u00eancias, e configura\u00e7\u00f5es de seu ambiente.<\/p>\n\n\n\n<p>Voc\u00ea certamente n\u00e3o precisar\u00e1 mais perder tempo desenvolvendo o que j\u00e1 existe e est\u00e1 pronto para uso.<\/p>\n\n\n\n<div style=\"padding:48.98% 0 0 0;position:relative;\"><iframe src=\"https:\/\/player.vimeo.com\/video\/675252136?h=f1507c5629&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479\" allow=\"autoplay; fullscreen; picture-in-picture\" allowfullscreen=\"\" style=\"position:absolute;top:0;left:0;width:100%;height:100%;\" title=\"post packagist\" frameborder=\"0\"><\/iframe><\/div><script src=\"https:\/\/player.vimeo.com\/api\/player.js\"><\/script>\n\n\n\n<h2 id=\"h-instala-o-do-composer\">Instala\u00e7\u00e3o do composer<\/h2>\n\n\n\n<p>A instala\u00e7\u00e3o do <em>composer<\/em> \u00e9 feita com alguns comandos PHP. Portanto, antes de iniciar sua instala\u00e7\u00e3o, certifique-se que voc\u00ea tem o PHP dispon\u00edvel no seu terminal.<\/p>\n\n\n\n<p>As 4 linhas que voc\u00ea digitar\u00e1 para instalar a vers\u00e3o mais recente do <em>composer<\/em> podem ser encontradas no come\u00e7o <a href=\"https:\/\/getcomposer.org\/download\/\">deste artigo<\/a>. Parte deste comando \u00e9 atualizada a cada nova vers\u00e3o a fim de verificar a autenticidade do arquivo baixado. Por isso n\u00e3o deixarei o comando por aqui.<\/p>\n\n\n\n<p>Uma vez instalado, voc\u00ea ter\u00e1 poder\u00e1 digitar <code>composer --version<\/code> em seu terminal e ver qual vers\u00e3o tem instalada.<\/p>\n\n\n\n<h3 id=\"h-atualiza-o\">Atualiza\u00e7\u00e3o<\/h3>\n\n\n\n<p>Para atualizar o composer, basta digitar <code>composer self-update<\/code>.<\/p>\n\n\n\n<p>Note que este comando atualizar\u00e1 o <em>composer<\/em> em si e n\u00e3o um projeto e suas depend\u00eancias. Veremos como fazer isso adiante neste artigo.<\/p>\n\n\n\n<h2 id=\"h-o-come-o-composer-require\">O come\u00e7o &#8211; composer require<\/h2>\n\n\n\n<p>O comando <code>require<\/code> \u00e9 usado sempre que queremos instalar uma depend\u00eancia em um projeto existente ou mesmo quando iniciamos algum desenvolvimento e precisamos de uma biblioteca externa.<\/p>\n\n\n\n<p>N\u00e3o importa de voc\u00ea est\u00e1 instalando um novo m\u00f3dulo no Magento 2, usando outro framework PHP qualquer, ou mesmo em um projeto que sequer utilize o <em>composer<\/em>.<\/p>\n\n\n\n<p>Ao digitar o comando <code>composer require &lt;desenvolvedor\/projeto&gt;<\/code>, o <em>composer<\/em> buscar\u00e1 este projeto e todas suas depend\u00eancias no Packagist. <\/p>\n\n\n\n<p class=\"has-cyan-bluish-gray-color has-text-color\">Eventualmente outros reposit\u00f3rios ser\u00e3o buscados se eles estiverem listados previamente no composer.json. Veremos isso adiante quando falar sobre o reposit\u00f3rio do Magento.<\/p>\n\n\n\n<p>Em seguida, este projeto ser\u00e1 adicionado \u00e0 pasta <code>\/vendor<\/code>.<\/p>\n\n\n\n<p>Veja um exemplo cl\u00e1ssico:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"1\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ composer require monolog\/monolog\nUsing version ^2.3 for monolog\/monolog\n.\/composer.json has been created\nRunning composer update monolog\/monolog\nLoading composer repositories with package information\nUpdating dependencies\nLock file operations: 2 installs, 0 updates, 0 removals\n  - Locking monolog\/monolog (2.3.5)\n  - Locking psr\/log (1.1.4)\nWriting lock file\nInstalling dependencies from lock file (including require-dev)\nPackage operations: 2 installs, 0 updates, 0 removals\n  - Downloading psr\/log (1.1.4)\n  - Installing psr\/log (1.1.4): Extracting archive\n  - Installing monolog\/monolog (2.3.5): Extracting archive\n11 package suggestions were added by new dependencies, use `composer suggest` to see details.\nGenerating autoload files\n1 package you are using is looking for funding.\nUse the `composer fund` command to find out more!\n<\/pre>\n\n\n\n<p>O <a href=\"https:\/\/packagist.org\/packages\/monolog\/monolog\">monolog<\/a> \u00e9 um dos projetos mais antigos e conhecidos no mundo PHP. Trata-se de uma biblioteca completa para &#8220;logar&#8221; o que voc\u00ea quiser e onde quiser.<\/p>\n\n\n\n<div class=\"wp-container-5 wp-block-columns\">\n<div class=\"wp-container-4 wp-block-column\" style=\"flex-basis:100%\">\n<div class=\"wp-container-3 wp-block-columns\">\n<div class=\"wp-container-1 wp-block-column\">\n<p>Ao digitar o comando acima, o composer criou os arquivos <code>composer.json<\/code> e <code>composer.lock<\/code> na pasta raiz. Al\u00e9m disso, tamb\u00e9m criou a pasta <code>\/vendor<\/code> com o monolog e suas depend\u00eancias.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-container-2 wp-block-column\">\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\u251c\u2500\u2500 composer.json\n\u251c\u2500\u2500 composer.lock\n\u2514\u2500\u2500 vendor\n    \u251c\u2500\u2500 autoload.php\n    \u251c\u2500\u2500 bin\n    \u251c\u2500\u2500 composer\n    \u251c\u2500\u2500 monolog\n    \u2514\u2500\u2500 psr<\/pre>\n<\/div>\n<\/div>\n\n\n\n<h3 id=\"h-testando-nosso-monolog-e-salvando-um-arquivo-de-log\">Testando nosso monolog e salvando um arquivo de log<\/h3>\n\n\n\n<p>Se desejar testar nosso monolog, crie o arquivo <code>index.php<\/code> na raiz do projeto com o seguinte conte\u00fado.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?php\nrequire 'vendor\/autoload.php';\n\nuse Monolog\\Logger;\nuse Monolog\\Handler\\StreamHandler;\n\n\/\/ create a log channel\n$log = new Logger('magenteiro');\n$log->pushHandler(new StreamHandler('teste.log', Logger::WARNING));\n\n\/\/ add records to the log\n$log->warning('Foo');\n$log->error('Bar');<\/pre>\n\n\n\n<p>Execute o arquivo com <code>php index.php<\/code> no seu terminal, e veja que um arquivo <code>teste.log<\/code> foi criado com nossas mensagens.<\/p>\n\n\n\n<p>Veja alguns dos <em>handlers<\/em> dispon\u00edveis nativamente no <em>Monolog<\/em> navegando em <code><a href=\"https:\/\/github.com\/Seldaek\/monolog\/tree\/main\/src\/Monolog\/Handler\" target=\"_blank\" rel=\"noreferrer noopener\">\/vendor\/monolog\/monolog\/src\/Monolog\/Handler<\/a><\/code>. <\/p>\n<\/div>\n<\/div>\n\n\n\n<h2 id=\"h-os-principais-arquivos-do-composer\">Os principais arquivos do composer<\/h2>\n\n\n\n<p>Sempre que trabalharmos em um projeto com composer, encontraremos dois arquivos principais na pasta raiz.<\/p>\n\n\n\n<h3 id=\"h-composer-json\">composer.json<\/h3>\n\n\n\n<p>Este arquivo \u00e9 respons\u00e1vel principalmente por listar as depend\u00eancias do projeto e suas vers\u00f5es.<\/p>\n\n\n\n<p>Um exemplo em bom Portug\u00eas seria: &#8220;composer, este projeto requer Magento 2.4 ou superior, mas n\u00e3o acima do 2.x, mesmo que o 3.0 j\u00e1 esteja dispon\u00edvel&#8221;.<\/p>\n\n\n\n<p>Eventualmente ele tamb\u00e9m pode falar &#8220;e exija que o PHP 8.0 ou superior, desde que 8.x, esteja instalado no ambiente, e a lib de conex\u00e3o com mysql esteja dispon\u00edvel no php&#8221;.<\/p>\n\n\n\n<p>Desta forma, se voc\u00ea enviar este arquivo para algu\u00e9m, a pessoa poder\u00e1 simplesmente digitar <code>composer install<\/code> na raiz do projeto para baixar as depend\u00eancias de acordo com as vers\u00f5es especificadas.<\/p>\n\n\n\n<h3 id=\"h-composer-lock\">composer.lock<\/h3>\n\n\n\n<p>Este arquivo nunca deve ser modificado manualmente. Ele cont\u00e9m informa\u00e7\u00f5es sobre todas bibliotecas instaladas e a vers\u00e3o exata de cada uma.<\/p>\n\n\n\n<p>Enquanto o <code>composer.json<\/code> pede &#8220;baixe esta depend\u00eancia em qualquer vers\u00e3o acima da 8.0 mas menor que 9.0&#8221;, o <code>composer.json<\/code> informa que a vers\u00e3o instalada daquela depend\u00eancia \u00e9 exatamente a <code>8.2.9<\/code>, por exemplo.<\/p>\n\n\n\n<p>Ao existir um arquivo <code>composer.lock<\/code>, o comando <code>composer install<\/code> instalar\u00e1 exatamente as vers\u00f5es especificadas ali, ignorando o <code>composer.json<\/code>. <\/p>\n\n\n\n<p>A presen\u00e7a do <code>composer.lock garante que os arquivos da pasta <\/code>\/vendor de um ambiente ser\u00e3o exatamente id\u00eanticos a outro com o mesmo arquivo <code>composer.lock<\/code>.<\/p>\n\n\n\n<p>No entanto, ao digitar o comando <code>composer update<\/code>, todas as bibliotecas e suas depen\u00eancias ser\u00e3o atualizadas para as vers\u00f5es especificadas no <code>composer.json<\/code>, e provavelmente os arquivos n\u00e3o ser\u00e3o mais iguais.<\/p>\n\n\n\n<h3 id=\"h-pasta-vendor\">Pasta \/vendor<\/h3>\n\n\n\n<p>Como vimos, a pasta <code>vendor<\/code> (fornecedor) cont\u00e9m todas as bibliotecas e suas depend\u00eancias, al\u00e9m de um arquivo <code>autoload.php<\/code>.<\/p>\n\n\n\n<p>Esta \u00e9 uma pasta que n\u00e3o deve estar presente no controle de vers\u00e3o. Afinal, o composer ser\u00e1 respons\u00e1vel por baixar e gerenciar seu conte\u00fado.<\/p>\n\n\n\n<p>O conte\u00fado da pasta <code>vendor<\/code> tamb\u00e9m <strong>nunca deve ser alterado manualmente<\/strong> por n\u00f3s. Se voc\u00ea precisa corrigir ou modificar uma biblioteca espec\u00edfica, o ideal \u00e9 que crie um <em>fork<\/em> da mesma ou mova-a para sua pasta de trabalho deste projeto. <\/p>\n\n\n\n<p>No caso de erros por conta de mudan\u00e7as inesperadas nesta pasta, \u00e9 comum removermos a pasta <code>vendor<\/code> e rodarmos o <code>composer install<\/code> novamente na raiz de um projeto. <\/p>\n\n\n\n<p>Portanto lembre-se de nunca mexer no conte\u00fado de sua pasta <code>vendor<\/code>.<\/p>\n\n\n\n<h2 id=\"h-o-que-versionar\">O que versionar<\/h2>\n\n\n\n<p>Se voc\u00ea criou um projeto ou biblioteca que deseja distribuir e eventualmente list\u00e1-lo no packagist.org, somente o arquivo <code>composer.json<\/code> \u00e9 necess\u00e1rio versionar. Veja um exemplo com o <a href=\"https:\/\/github.com\/Seldaek\/monolog\/blob\/fb2c324c17941ffe805aa7c953895af96840d0c9\/composer.json\">composer.json do projeto monolog<\/a>.<\/p>\n\n\n\n<p>O composer.json sempre ser\u00e1 necess\u00e1rio para o composer. Por isso, na minha opini\u00e3o ele sempre deve ser versionado.<\/p>\n\n\n\n<p>J\u00e1 o <code>composer.lock<\/code> traz informa\u00e7\u00f5es importantes sobre o nosso projeto. A n\u00e3o exist\u00eancia dele ao baixar um projeto versionado pode nos levar a ter arquivos diferentes do de outros desenvolvedores ou mesmo do ambiente de produ\u00e7\u00e3o. Isso pode trazer consequ\u00eancias e comportamentos inesperados. Por isso, o <code>composer.lock<\/code> tamb\u00e9m deve ser versionado.<\/p>\n\n\n\n<p>A pasta <code>\/vendor<\/code> por sua vez, n\u00e3o precisa ser versionada. Afinal, o <em>composer<\/em> se encarregar\u00e1 de baixar suas depend\u00eancias.<\/p>\n\n\n\n<h2 id=\"h-depend-ncias-suas-vers-es-e-constraints\">Depend\u00eancias, suas vers\u00f5es e constraints<\/h2>\n\n\n\n<p>Ao solicitar ou adicionar uma nova depend\u00eancia ao <code>composer.json<\/code>, precisamos informar que vers\u00e3o deste pacote desejamos.<\/p>\n\n\n\n<p>As vers\u00f5es dispon\u00edveis de um pacote geralmente coincidem com as <em>tags<\/em> de seu reposit\u00f3rio. Estas tags s\u00e3o absorvidas pelo Packagist e listadas na p\u00e1gina do pacote. Veja um exemplo:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" src=\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/packagist-tags-700x653.jpg\" alt=\"\" class=\"wp-image-3324\" width=\"700\" height=\"653\" srcset=\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/packagist-tags-700x653.jpg 700w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/packagist-tags-250x233.jpg 250w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/packagist-tags-768x717.jpg 768w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/packagist-tags-760x709.jpg 760w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/packagist-tags-500x467.jpg 500w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/packagist-tags-120x112.jpg 120w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/packagist-tags.jpg 900w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p>Ao chamar o comando <code>composer require monolog\/monolog<\/code> podemos acrescentar a vers\u00e3o que desejamos ou uma <em>constraint<\/em> que informa o intervalo de vers\u00f5es que desejamos.<\/p>\n\n\n\n<p>Veja alguns exemplos:<\/p>\n\n\n\n<ul><li>composer require monolog\/monolog <strong>2.3.5<\/strong> &#8211; a vers\u00e3o 2.3.5 ser\u00e1 instalada, mesmo que uma mais recente esteja dispon\u00edvel<\/li><li>composer require monolog\/monolog <strong>^2.2<\/strong> &#8211; qualquer vers\u00e3o igual ou mais recente que a 2.2.0, mas menor que 2.3.0 ser\u00e1 instalada. Ex: 2.12.0, 2.2.5, 2.2.8, 2.2.0<\/li><li>composer require monolog\/monolog <strong>2.*<\/strong> &#8211; a mais recente vers\u00e3o que comece com 2 ser\u00e1 instalada<\/li><\/ul>\n\n\n\n<p>Quer testar isso na pr\u00e1tica? Conhe\u00e7a o <a href=\"https:\/\/semver.madewithlove.com\/\">Semver Checker<\/a> MadeWithLove e teste a <em>constraint<\/em> de uma vers\u00e3o, para ver quais op\u00e7\u00f5es estar\u00e3o dispon\u00edveis.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/www.magenteiro.com\/blog\/?attachment_id=3325\"><img loading=\"lazy\" src=\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-700x261.png\" alt=\"Packagist - Verificador de Vers\u00e3o (Constraint)\" class=\"wp-image-3325\" width=\"700\" height=\"261\" title=\"Packagist Semver Checker\" srcset=\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-700x261.png 700w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-250x93.png 250w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-768x286.png 768w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-1536x572.png 1536w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-2048x763.png 2048w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-760x283.png 760w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-500x186.png 500w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-120x45.png 120w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/a><\/figure>\n\n\n\n<p>N\u00e3o tem um reposit\u00f3rio, mas quer testar para saber se uma vers\u00e3o ser\u00e1 atendido por sua constraint? Sem problemas. Use o <a href=\"https:\/\/jubianchi.github.io\/semver-check\/\">Semver check<\/a> do Jubianchi ent\u00e3o.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/www.magenteiro.com\/blog\/?attachment_id=3326\"><img loading=\"lazy\" src=\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-1-700x279.png\" alt=\"Semver Check - veja se uma constraint atende determinada vers\u00e3o\" class=\"wp-image-3326\" width=\"700\" height=\"279\" title=\"Semver Check\" srcset=\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-1-700x279.png 700w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-1-250x100.png 250w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-1-768x306.png 768w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-1-1536x612.png 1536w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-1-2048x816.png 2048w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-1-760x303.png 760w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-1-500x199.png 500w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-1-120x48.png 120w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/a><\/figure>\n\n\n\n<p>Al\u00e9m de testar se a constraint informada atende aquela vers\u00e3o, ele ainda d\u00e1 uma mini aula sobre o assunto.<\/p>\n\n\n\n<h3 id=\"h-semantic-versioning\">Semantic versioning<\/h3>\n\n\n\n<p>O uso de <em>constraints<\/em> \u00e9 recomendado quando adicionamos depend\u00eancias. Se todos seguirem as boas pr\u00e1ticas, uma atualiza\u00e7\u00e3o 2.4.3 para 2.4.4 de um componente n\u00e3o ser\u00e1 um problema. No entanto, \u00e9 esperado que n\u00e3o haja compatibilidade entre uma atualiza\u00e7\u00e3o 2.4.4 para 3.0.0.<\/p>\n\n\n\n<p>Parafraseando a defini\u00e7\u00e3o do versionamento sem\u00e2ntico, a regra seguiria da seguinte forma:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p>Dado um n\u00famero de vers\u00e3o MAJOR.MINOR.PATCH, incremente a:<\/p><\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote\"><p>1. vers\u00e3o Maior(MAJOR): quando fizer mudan\u00e7as incompat\u00edveis na API,<\/p><p>2. vers\u00e3o Menor(MINOR): quando adicionar funcionalidades mantendo compatibilidade, e<\/p><p>3. vers\u00e3o de Corre\u00e7\u00e3o(PATCH): quando corrigir falhas mantendo compatibilidade.<\/p><\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote\"><p>R\u00f3tulos adicionais para pr\u00e9-lan\u00e7amento(pre-release) e metadados de constru\u00e7\u00e3o(build) est\u00e3o dispon\u00edveis como extens\u00e3o ao formato MAJOR.MINOR.PATCH.<\/p><\/blockquote>\n\n\n\n<p>Voc\u00ea pode ler a <a href=\"https:\/\/semver.org\/lang\/pt-BR\/\">documenta\u00e7\u00e3o completa do versionamento sem\u00e2ntico<\/a> para versionar seus projetos com efici\u00eancia. Ela est\u00e1 dispon\u00edvel tamb\u00e9m em Portugu\u00eas.<\/p>\n\n\n\n<h2 id=\"h-o-composer-do-magento\">O composer do Magento<\/h2>\n\n\n\n<p>M\u00f3dulos, temas e pacotes de tradu\u00e7\u00e3o tamb\u00e9m s\u00e3o instalados com <em>composer<\/em> no Magento.<\/p>\n\n\n\n<p>No entanto, al\u00e9m do Packagist, o Magento d\u00e1 prefer\u00eancia ao seu reposit\u00f3rio privado. Para acess\u00e1-lo \u00e9 necess\u00e1rio obter suas chaves no Marketplace. Mostramos isso no artigo sobre <a href=\"https:\/\/www.magenteiro.com\/blog\/magento-2\/instalar-magento-2-tutorial\/\">Como instalar o Magento 2 usando composer<\/a>.<\/p>\n\n\n\n<p>Uma vez que voc\u00ea compra um m\u00f3dulo ou tema no marketplace da Adobe, o produto fica dispon\u00edvel em sua conta. E caso seu Magento tenha sido instalado com composer, voc\u00ea poder\u00e1 usar o comando <code>composer require<\/code> + <code>nome do componente<\/code> e opcionalmente a <em>constraint<\/em> de vers\u00e3o que desejar.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/marketplace.magento.com\/ricardomartins-pagseguro.html\"><img loading=\"lazy\" src=\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-2.png\" alt=\"Exemplo do m\u00f3dulo PagSeguro listado na \u00e1rea de m\u00f3dulos comprados no Magento Marketplace\" class=\"wp-image-3327\" width=\"216\" height=\"623\" title=\"Exemplo do m\u00f3dulo PagSeguro listado na \u00e1rea de m\u00f3dulos comprados no Magento Marketplace - Clicar aqui levar\u00e1 para a p\u00e1gina do M\u00f3dulo do PagSeguro\" srcset=\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-2.png 498w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-2-250x721.png 250w, https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/image-2-120x346.png 120w\" sizes=\"(max-width: 216px) 100vw, 216px\" \/><\/a><\/figure>\n\n\n\n<p>Gostou deste artigo? N\u00e3o esque\u00e7a de comentar e compartilhar.<\/p>\n\n\n\n<p>Muito mais do que isso \u00e9 ensinado nos <a href=\"https:\/\/www.magenteiro.com\/cursos\">nossos cursos<\/a> por aqui. Fique ligado(a).<\/p>\n","protected":false},"excerpt":{"rendered":"Composer \u00e9 o gerenciador de pacotes e depend\u00eancias mais utilizado no mundo PHP. Ele \u00e9 um pouco mais novo que [&hellip;]","protected":false},"author":1,"featured_media":3332,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[27,25,24],"tags":[117,75,82,41,60,68],"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>Composer: um jeito simples de entender<\/title>\n<meta name=\"description\" content=\"Entenda rapidamente como o composer funciona e como us\u00e1-lo para gerenciar depend\u00eancias em seus projetos. Veja como us\u00e1-lo e como version\u00e1-lo.\" \/>\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\/para-magenteiros\/composer-um-jeito-simples-de-entender\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Composer: um jeito simples de entender\" \/>\n<meta property=\"og:description\" content=\"Entenda rapidamente como o composer funciona e como us\u00e1-lo para gerenciar depend\u00eancias em seus projetos. Veja como us\u00e1-lo e como version\u00e1-lo.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/\" \/>\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=\"2022-02-09T04:28:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-02-24T21:41:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/composer-guia-rapido-opt.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"480\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\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\/para-magenteiros\/composer-um-jeito-simples-de-entender\/\",\"url\":\"https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/\",\"name\":\"Composer: um jeito simples de entender\",\"isPartOf\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#website\"},\"datePublished\":\"2022-02-09T04:28:24+00:00\",\"dateModified\":\"2022-02-24T21:41:06+00:00\",\"description\":\"Entenda rapidamente como o composer funciona e como us\u00e1-lo para gerenciar depend\u00eancias em seus projetos. Veja como us\u00e1-lo e como version\u00e1-lo.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.magenteiro.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Composer: um jeito simples de entender\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/\"},\"author\":{\"name\":\"Ricardo Martins\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/e90c4bb268e5f2dad10d7c9760d4f150\"},\"headline\":\"Composer: um jeito simples de entender\",\"datePublished\":\"2022-02-09T04:28:24+00:00\",\"dateModified\":\"2022-02-24T21:41:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/\"},\"wordCount\":1660,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#organization\"},\"keywords\":[\"B\u00e1sico\",\"composer\",\"dicas\",\"Magento 2\",\"Tutoriais Magento\",\"tutorial\"],\"articleSection\":[\"Desenvolvimento\",\"Magento 2\",\"Para Magenteiros\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/#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":"Composer: um jeito simples de entender","description":"Entenda rapidamente como o composer funciona e como us\u00e1-lo para gerenciar depend\u00eancias em seus projetos. Veja como us\u00e1-lo e como version\u00e1-lo.","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\/para-magenteiros\/composer-um-jeito-simples-de-entender\/","og_locale":"pt_BR","og_type":"article","og_title":"Composer: um jeito simples de entender","og_description":"Entenda rapidamente como o composer funciona e como us\u00e1-lo para gerenciar depend\u00eancias em seus projetos. Veja como us\u00e1-lo e como version\u00e1-lo.","og_url":"https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/","og_site_name":"Magenteiro | V\u00eddeos, Artigos, e Cursos Magento 2 e Magento 1","article_publisher":"https:\/\/facebook.com\/magenteiro","article_published_time":"2022-02-09T04:28:24+00:00","article_modified_time":"2022-02-24T21:41:06+00:00","og_image":[{"width":960,"height":480,"url":"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2022\/02\/composer-guia-rapido-opt.jpg","type":"image\/jpeg"}],"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\/para-magenteiros\/composer-um-jeito-simples-de-entender\/","url":"https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/","name":"Composer: um jeito simples de entender","isPartOf":{"@id":"https:\/\/www.magenteiro.com\/blog\/#website"},"datePublished":"2022-02-09T04:28:24+00:00","dateModified":"2022-02-24T21:41:06+00:00","description":"Entenda rapidamente como o composer funciona e como us\u00e1-lo para gerenciar depend\u00eancias em seus projetos. Veja como us\u00e1-lo e como version\u00e1-lo.","breadcrumb":{"@id":"https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.magenteiro.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Composer: um jeito simples de entender"}]},{"@type":"Article","@id":"https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/#article","isPartOf":{"@id":"https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/"},"author":{"name":"Ricardo Martins","@id":"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/e90c4bb268e5f2dad10d7c9760d4f150"},"headline":"Composer: um jeito simples de entender","datePublished":"2022-02-09T04:28:24+00:00","dateModified":"2022-02-24T21:41:06+00:00","mainEntityOfPage":{"@id":"https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/"},"wordCount":1660,"commentCount":0,"publisher":{"@id":"https:\/\/www.magenteiro.com\/blog\/#organization"},"keywords":["B\u00e1sico","composer","dicas","Magento 2","Tutoriais Magento","tutorial"],"articleSection":["Desenvolvimento","Magento 2","Para Magenteiros"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.magenteiro.com\/blog\/para-magenteiros\/composer-um-jeito-simples-de-entender\/#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\/3320"}],"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=3320"}],"version-history":[{"count":8,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/posts\/3320\/revisions"}],"predecessor-version":[{"id":3388,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/posts\/3320\/revisions\/3388"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/media\/3332"}],"wp:attachment":[{"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/media?parent=3320"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/categories?post=3320"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/tags?post=3320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}