{"id":229811,"date":"2022-11-11T10:58:00","date_gmt":"2022-11-11T07:58:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229811"},"modified":"2022-11-09T16:28:40","modified_gmt":"2022-11-09T13:28:40","slug":"compositor-para-wordpress-parte-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/compositor-para-wordpress-parte-1\/","title":{"rendered":"Compositor para WordPress, Parte 1"},"content":{"rendered":"\n<p>Ok, ent\u00e3o depois de falar sobre todas as v\u00e1rias bibliotecas que podem ajudar a melhorar a qualidade do c\u00f3digo do seu trabalho, ainda levanta uma quest\u00e3o:<\/p>\n<p>Como fazemos com que esses projetos funcionem em nossa base de c\u00f3digo?<\/p>\n<p>Em suma, requer <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a>. Se voc\u00ea nunca usou, j\u00e1 <a href=\"https:\/\/tommcfarlin.com\/setting-php-and-composer-in-mamp\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">escrevi brevemente sobre isso<\/a> antes, mas pretendo fornecer o b\u00e1sico do que voc\u00ea precisa para come\u00e7ar a us\u00e1-lo e as bibliotecas mencionadas acima em seu trabalho.<\/p>\n<p>Tanto neste post quanto no pr\u00f3ximo, vou compartilhar como configurar tudo localmente na forma mais b\u00e1sica e depois como ele se integra ao Git para que voc\u00ea possa come\u00e7ar a us\u00e1-lo no seu dia-a-dia.<\/p>\n<h2>Configurando o Composer para WordPress<\/h2>\n<p>H\u00e1 muitas informa\u00e7\u00f5es que podem (e eu diria que deveriam entrar em um arquivo para o Composer). Isso inclui coisas como informa\u00e7\u00f5es do autor, PSR, informa\u00e7\u00f5es etc. Mas isso est\u00e1 realmente al\u00e9m do escopo deste post. Em vez disso, quero compartilhar o m\u00ednimo necess\u00e1rio sobre como configurar e configurar essas informa\u00e7\u00f5es.<\/p>\n<h3>Um diret\u00f3rio de amostra<\/h3>\n<p>Suponha que, por um momento, voc\u00ea est\u00e1 prestes a come\u00e7ar a trabalhar em um plugin ou algo relacionado ao WordPress que exigir\u00e1 as v\u00e1rias bibliotecas discutidas na s\u00e9rie anterior. E ao configurar o diret\u00f3rio para isso, voc\u00ea ter\u00e1 muito poucos arquivos. Pode haver alguns arquivos PHP vazios, ativos, etc. Talvez fique assim:<\/p>\n<p>\u00c9 verdade que o exemplo acima j\u00e1 est\u00e1 um pouco \u00e0 frente do que seu trabalho pode parecer porque:<\/p>\n<ul>\n<li>Existe um <code>composer.lock<\/code>\u00a0arquivo mostrando que o Composer foi executado,<\/li>\n<li>Ele tem um <code>vendor<\/code>\u00a0diret\u00f3rio que mostra que as bibliotecas foram instaladas via Composer,<\/li>\n<li>Existe um <code>grumphp.yml<\/code>\u00a0arquivo que define como o GrumPHP deve funcionar (e falarei sobre isso mais tarde) ao farejar c\u00f3digo.<\/li>\n<\/ul>\n<p>Mas a ess\u00eancia do acima \u00e9 a mesma: Voc\u00ea tem <code>composer.json<\/code>e define e inclui tudo o que precisamos com base no post anterior. Ent\u00e3o, como vamos configur\u00e1-lo?<\/p>\n<h3>Configurando o Compositor<\/h3>\n<p>Primeiro, voc\u00ea precisa ter uma ideia de como vai estruturar seu plugin. Por exemplo, eu tenho uma configura\u00e7\u00e3o de plugin como esta:<\/p>\n<ul>\n<li>Todos os arquivos PHP residem no <code>src<\/code>\u00a0diret\u00f3rio,<\/li>\n<li>Todos os arquivos CSS, JavaScript, imagens, etc., est\u00e3o no <code>assets<\/code>\u00a0diret\u00f3rio,<\/li>\n<li>O <code>vendor<\/code>\u00a0diret\u00f3rio \u00e9 para coisas que s\u00e3o instaladas via Composer,<\/li>\n<li><code>views<\/code>\u00a0\u00e9 o que \u00e9 usado no front-end do projeto.<\/li>\n<\/ul>\n<p>Por exemplo:<\/p>\n<\/p>\n<p>Segundo, no diret\u00f3rio em quest\u00e3o, voc\u00ea desejar\u00e1 criar um arquivo chamado <code>composer.json<\/code>. Isso pode ser feito via Terminal apenas emitindo um <code>touch<\/code>\u00a0comando ou voc\u00ea pode cri\u00e1-lo em seu IDE.<\/p>\n<p>O importante a tirar disso \u00e9 que existe um <code>src<\/code>\u00a0diret\u00f3rio porque esse \u00e9 o diret\u00f3rio que inclui nossos arquivos PHP e esse \u00e9 o diret\u00f3rio que queremos cheirar.<\/p>\n<h3>Um arquivo de compositor b\u00e1sico<\/h3>\n<p>Com isso dito, aqui est\u00e1 um <code>composer.json<\/code>arquivo b\u00e1sico que voc\u00ea pode usar em seus projetos com base na s\u00e9rie anterior e com base no que \u00e9 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/60ac0e1fba9fa152fc57622e3866d6dc\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">compartilhado<\/a> abaixo:<\/p>\n<pre><code>{\n  \"name\": \"pressware\/demo-wordpress-plugin\",\n  \"description\": \"This file is used to show how to configure a WordPress plugin using Composer.\",\n  \"autoload\": {\n    \"psr-4\": {\n      \"Pressware\": \"src\/\"\n    }\n  },\n  \"require-dev\": {\n    \"phpro\/grumphp\": \"^0.11.6\",\n    \"phpmd\/phpmd\": \"^2.6\",\n    \"phpunit\/phpunit\": \"5.7.21\",\n    \"nikic\/php-parser\": \"^3.0\",\n    \"sebastian\/phpcpd\": \"^3.0\",\n    \"povils\/phpmnd\": \"^1.1\",\n    \"squizlabs\/php_codesniffer\": \"^3.0\",\n    \"jakub-onderka\/php-parallel-lint\": \"^0.9.2\",\n    \"sensiolabs\/security-checker\": \"^4.0\"\n  }\n}<\/code><\/pre>\n<p>Observando o arquivo acima, veja como analis\u00e1-lo:<\/p>\n<ol>\n<li>As linhas 2 e 3 d\u00e3o uma pequena descri\u00e7\u00e3o do que \u00e9 o plugin. Essas tamb\u00e9m s\u00e3o outras \u00e1reas neste arquivo para fornecer mais informa\u00e7\u00f5es sobre o que precisa ser feito.<\/li>\n<li>As linhas 4 a 8 s\u00e3o importantes porque explicam que estamos usando <a href=\"http:\/\/www.php-fig.org\/psr\/psr-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">o PSR-4<\/a> para carregamento autom\u00e1tico e que todos os arquivos se enquadram no namespace de n\u00edvel superior <code>Pressware<\/code>e que os arquivos PHP est\u00e3o no <code>src<\/code>\u00a0diret\u00f3rio.<\/li>\n<li>As linhas 9 a 18 cobrem todos os arquivos abordados na s\u00e9rie anterior.<\/li>\n<\/ol>\n<p>Em seguida, emita o seguinte comando no seu terminal:<\/p>\n<p><code>$ composer install<\/code><\/p>\n<p>E isso instalar\u00e1 esses pacotes.<\/p>\n<h2>E os compromissos?<\/h2>\n<p>Para ter certeza de que voc\u00ea est\u00e1 snuffing e manipulando commits corretamente, \u00e9 importante que voc\u00ea configure o GrumPHP para que ele observe os arquivos. Mas vou dar uma olhada nisso no pr\u00f3ximo post.<\/p>\n<p>Enquanto isso, talvez esta seja uma boa oportunidade para configurar um plugin de demonstra\u00e7\u00e3o e praticar com o c\u00f3digo acima. Acertar na primeira vez pode ser dif\u00edcil. Felizmente, muitos dos erros de sa\u00edda s\u00e3o realmente f\u00e1ceis de entender, por isso \u00e9 relativamente simples resolv\u00ea-los.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este \u00e9 o primeiro de uma s\u00e9rie de duas partes sobre como configurar o Composer para desenvolvimento do WordPress para que voc\u00ea possa escrever c\u00f3digo de alta qualidade em seu trabalho).<\/p>\n","protected":false},"author":1,"featured_media":166003,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[753,722,1021],"tags":[1170],"class_list":["post-229811","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-aberto","category-desenvolvedor","category-sites-uteis","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229811","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=229811"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229811\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/166003"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=229811"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=229811"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=229811"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}