{"id":231228,"date":"2022-12-15T15:00:00","date_gmt":"2022-12-15T12:00:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231228"},"modified":"2022-12-07T11:38:04","modified_gmt":"2022-12-07T08:38:04","slug":"compositor-sem-integracao-continua","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/compositor-sem-integracao-continua\/","title":{"rendered":"Compositor sem integra\u00e7\u00e3o cont\u00ednua"},"content":{"rendered":"\n<p>Se voc\u00ea \u00e9 um desenvolvedor WordPress que est\u00e1 usando o Composer sem integra\u00e7\u00e3o cont\u00ednua, \u00e9 prov\u00e1vel que voc\u00ea tenha uma etapa crucial de descobrir como gerenciar o diret\u00f3rio do fornecedor ao implantar seus plugins.<\/p>\n<p>Aquilo \u00e9:<\/p>\n<ul>\n<li>Sabemos que \u00e9 uma m\u00e1 ideia colocar todo o diret\u00f3rio do fornecedor sob controle de origem,<\/li>\n<li>Outros desenvolvedores que est\u00e3o familiarizados com o <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a> devem ser capazes de come\u00e7ar a trabalhar sem a necessidade de muita instru\u00e7\u00e3o,<\/li>\n<li>A integra\u00e7\u00e3o cont\u00ednua n\u00e3o est\u00e1 sendo usada por v\u00e1rios motivos,<\/li>\n<li>E ficamos com a necessidade de fornecer uma entrega de n\u00edvel de produ\u00e7\u00e3o que use certas depend\u00eancias, mas n\u00e3o outras.<\/li>\n<\/ul>\n<p>Por mais que os pontos acima possam descrever nossa situa\u00e7\u00e3o, eles n\u00e3o nos dizem o que podemos fazer com ela.<\/p>\n<p>Em outras palavras, aqui est\u00e1 o caso de uso: voc\u00ea construiu um plugin WordPress para algu\u00e9m. Este plugin usa uma variedade de depend\u00eancias, todas mantidas pelo Composer.<\/p>\n<p>Voc\u00ea n\u00e3o est\u00e1 verificando o diret\u00f3rio do fornecedor no reposit\u00f3rio, mas tamb\u00e9m n\u00e3o est\u00e1 usando a integra\u00e7\u00e3o cont\u00ednua para implantar o plug-in. Em vez disso, o cliente \u00e9, ou um terceiro \u00e9.<\/p>\n<p>E da\u00ed?<\/p>\n<h2>Distribui\u00e7\u00e3o com Composer sem Integra\u00e7\u00e3o Cont\u00ednua<\/h2>\n<p>A vers\u00e3o curta \u00e9 esta:<\/p>\n<p>Exporte o branch master (ou release branch ou como voc\u00ea o chamar) de sua c\u00f3pia local do plug-in e, em seguida, certifique-se de executar o comando Composer que o instrui a criar o diret\u00f3rio do fornecedor sem as depend\u00eancias no n\u00edvel de desenvolvimento.<\/p>\n<p>Em seguida, voc\u00ea pode agrupar o arquivo gerado e distribu\u00ed-lo ao seu cliente.<\/p>\n<h3>Mas como?<\/h3>\n<p>Primeiro, estou assumindo que a c\u00f3pia local do seu plugin n\u00e3o tem uma c\u00f3pia do diret\u00f3rio do fornecedor, mas tem todo o c\u00f3digo mais recente extra\u00eddo do reposit\u00f3rio remoto.<\/p>\n<p>Ou seja, voc\u00ea tem a vers\u00e3o mais recente e est\u00e1vel do c\u00f3digo pronta para ser lan\u00e7ada, mas ainda n\u00e3o est\u00e1 pronto para isso porque ela n\u00e3o possui as depend\u00eancias necess\u00e1rias para, digamos, carregamento autom\u00e1tico e outras funcionalidades semelhantes.<\/p>\n<p>O primeiro passo ser\u00e1 exportar o reposit\u00f3rio local para um arquivo. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/2f47b8077d8bb58909d34a35baac786b#file-00-export-local-repository-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Veja como voc\u00ea pode fazer isso<\/a> soltando-o na \u00e1rea de trabalho:<\/p>\n<pre><code>$ git archive -o ~\/Desktop\/plugin-name.zip HEAD<\/code><\/pre>\n<p>Em seguida, instrua o Composer a <a href=\"https:\/\/gist.github.com\/tommcfarlin\/2f47b8077d8bb58909d34a35baac786b#file-01-install-production-dependencies-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">instalar as depend\u00eancias<\/a> que est\u00e3o fora da diretiva <strong>require-dev<\/strong><code>composer.json<\/code> em seu arquivo:<\/p>\n<pre><code>$ composer install --no-dev<\/code><\/pre>\n<p>Agora voc\u00ea pode arquivar o diret\u00f3rio gerado em um plugin e distribuir esse arquivo.<\/p>\n<h2>Isso \u00e9 o ideal?<\/h2>\n<p>Eu n\u00e3o diria que isso \u00e9 ideal, mas \u00e9 uma solu\u00e7\u00e3o para um caso de uso que certamente existe, ent\u00e3o eu diria que \u00e9 algo que pode ser feito para resolver um problema espec\u00edfico.<\/p>\n<p>Em \u00faltima an\u00e1lise, se voc\u00ea est\u00e1 procurando uma maneira de distribuir um plugin do WordPress que usa o Composer sem integra\u00e7\u00e3o cont\u00ednua, esta \u00e9 uma maneira de faz\u00ea-lo.<\/p>\n<p>Eu reconhe\u00e7o, por\u00e9m, que \u00e9 um caso de uso espec\u00edfico e, portanto, tem uma solu\u00e7\u00e3o espec\u00edfica.<\/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>Em \u00faltima an\u00e1lise, se voc\u00ea est\u00e1 procurando uma maneira de distribuir um plugin do WordPress que usa o Composer sem integra\u00e7\u00e3o cont\u00ednua, esta \u00e9 uma maneira de faz\u00ea-lo.<\/p>\n","protected":false},"author":1,"featured_media":235914,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,722,837,806,867],"tags":[1170],"class_list":["post-231228","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-guia-para-iniciantes","category-php-8","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231228","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=231228"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231228\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/235914"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}