{"id":229481,"date":"2022-11-13T15:32:00","date_gmt":"2022-11-13T12:32:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229481"},"modified":"2022-11-13T15:34:01","modified_gmt":"2022-11-13T12:34:01","slug":"compositor-para-wordpress-parte-2","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/compositor-para-wordpress-parte-2\/","title":{"rendered":"Compositor para WordPress, Parte 2"},"content":{"rendered":"\n<p>En esta publicaci\u00f3n, concluir\u00e9 lo que comenc\u00e9 a compartir <a href=\"https:\/\/wordpress.mediadoma.com\/es\/compositor-para-wordpress-parte-1\/\" title=\"ayer\">ayer<\/a>: usar las herramientas y <a href=\"https:\/\/tommcfarlin.com\/tag\/libraries-for-wordpress-plugins\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">bibliotecas<\/a> que he compartido junto con Composer para rastrear sus confirmaciones durante el desarrollo antes de que el c\u00f3digo llegue al repositorio.<\/p>\n<p>Idealmente, siempre querr\u00e1 ver algo como esto en su terminal cada vez que confirme su c\u00f3digo:<\/p>\n<p>Pero ese no es siempre el caso. Sin embargo, como ocurre con la mayor\u00eda de las cosas, cuanto m\u00e1s practique, m\u00e1s se acostumbrar\u00e1 a escribir c\u00f3digo que pasar\u00e1 autom\u00e1ticamente los diversos olfateos implementados a trav\u00e9s de las diferentes reglas (y sus personalizaciones).<\/p>\n<p>Sin embargo, antes de hacer eso, debe configurar GrumPHP en su repositorio.<\/p>\n<h2>Composer para WordPress: olfateo de confirmaciones<\/h2>\n<p>Ayer, proporcion\u00e9 una muestra <code>composer.json<\/code>\u00a0, as\u00ed que hoy veremos un archivo de configuraci\u00f3n de GrumPHP de muestra y veremos qu\u00e9 hace cada parte.<\/p>\n<p>Lo importante a tener en cuenta es que, aunque algo de lo que ver\u00e1 no es at\u00edpico para un proyecto, puede ajustarlo tanto como desee para cada proyecto que utilice. A veces es posible que desee que est\u00e9 m\u00e1s enfocado de lo que est\u00e1 ahora; otras veces, es posible que no le importen algunos de los olores que ofrece.<\/p>\n<h3>Una configuraci\u00f3n inicial<\/h3>\n<p>Dicho esto, despu\u00e9s de instalar GrumPHP, se crear\u00e1 un <code>grumphp.yml<\/code>archivo casi vac\u00edo que estar\u00e1 listo para configurarse. Por ejemplo, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/ab0cd032408fdc5cc30c035d77ea49ba#file-00-initial-grumphp-yml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">esto es lo que deber\u00edas ver<\/a> :<\/p>\n<pre><code>parameters:\n    git_dir:. bin_dir: vendor\/bin\n    tasks:<\/code><\/pre>\n<p>Tenga en cuenta que no hay nada m\u00e1s que especificar:<\/p>\n<ul>\n<li>la ubicaci\u00f3n del dep\u00f3sito,<\/li>\n<li>la ubicaci\u00f3n de los binarios instalados a trav\u00e9s de Composer,<\/li>\n<li>las tareas a ejecutar.<\/li>\n<\/ul>\n<p>Tenga en cuenta que siempre he usado &#8216;.&#8217; para la ubicaci\u00f3n de mi repositorio porque nunca lo he instalado dentro del repositorio en el que estoy trabajando.<\/p>\n<p>Lo mismo ocurre con los binarios de Composer. Es decir, despu\u00e9s de instalar todo a trav\u00e9s de Composer, los dejo en sus ubicaciones iniciales.<\/p>\n<p>Y finalmente, la directiva inicial <code>tasks<\/code>est\u00e1 vac\u00eda porque todav\u00eda no hay nada que ejecutar. Eso es lo que mirar\u00e9 en el siguiente paso.<\/p>\n<h3>Configurando GrumPHP<\/h3>\n<p>Una vez que haya instalado sus bibliotecas y est\u00e9 listo para configurar un poco, quiz\u00e1s pueda hacer algo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/ab0cd032408fdc5cc30c035d77ea49ba#file-01-sample-grumphp-yml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">como esto<\/a> :<\/p>\n<pre><code>parameters:\n    git_dir:. bin_dir: vendor\/bin\n    tasks:\n      securitychecker:\n      composer:\n      jsonlint:\n      xmllint:\n      yamllint:\n      phpstan:\n      phplint:\n      phpunit:\n      phpcs:\n      phpcpd:\n      phpmnd:\n      phpparser:\n        visitors:\n          no_exit_statements: ~\n          never_use_else: ~\n          forbidden_function_calls:\n            blacklist:\n              - \"die\"\n              - \"var_dump\"\n              - \"exit\"\n      phpversion:\n        project: '7.0'\n       phpmd:\n         ruleset: ['phpmd.xml.dist']<\/code><\/pre>\n<p>No resumir\u00e9 todo lo anterior (porque no hay mucho que resumir), pero todav\u00eda hay algunas cosas que se\u00f1alar:<\/p>\n<ul>\n<li>Tenga en cuenta que hay una lista de tareas mucho m\u00e1s larga que la definida en el directorio inicial. Eso es normal y significa que queremos ejecutar esas herramientas usando la configuraci\u00f3n predeterminada para cada una de esas herramientas.<\/li>\n<li>Algunas de las reglas tienen un <code>~<\/code>al lado de ellos. Esto depende de la tarea en cuesti\u00f3n, pero esto generalmente significa que queremos usar la configuraci\u00f3n predeterminada.<\/li>\n<li>Hay tareas como <code>phpparser<\/code>esa que tienen subtareas. Algunos de ellos, como puede ver arriba, usan el comportamiento predeterminado. Otros optan por poner en la lista negra t\u00e9rminos como <code>die<\/code>, <code>var_dump<\/code>, <code>exit<\/code>y m\u00e1s. Esto significa que, como si la directiva no fuera lo suficientemente clara, haremos que GrumPHP falle si se detecta alguna de estas declaraciones.<\/li>\n<li>Del mismo modo, eche un vistazo a <code>phpmd<\/code>. Esto apunta al conjunto de reglas que usaremos cuando busquemos varios l\u00edos en el c\u00f3digo. En este caso, apunta a un <code>dist<\/code>\u00a0archivo, pero puede apuntar a cualquier conjunto personalizado de reglas que haya definido.<\/li>\n<\/ul>\n<p>Esta es solo una muestra de lo que puedes hacer con GrumPHP. Es decir, puede instalar algunas bibliotecas a trav\u00e9s de Composer, instalarlas y luego adaptar GrumPHP para aprovechar la funcionalidad que se proporciona.<\/p>\n<p>Al igual que con otros proyectos similares, recomiendo leer la <a href=\"https:\/\/github.com\/phpro\/grumphp\/blob\/master\/doc\/tasks.md\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documentaci\u00f3n<\/a> que existe para las diversas tareas que se integran con GrumPHP.<\/p>\n<h2>\u00bfEsto es Composer para WordPress?<\/h2>\n<p>Si y no. <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a> es un administrador de paquetes de prop\u00f3sito general para proyectos PHP; sin embargo, no parece que lo veamos mucho en el mundo de WordPress. Esto no quiere decir que no se use (lo es), pero simplemente conocer Composer y saber c\u00f3mo usarlo no es suficiente.<\/p>\n<p>En cambio, creo que es importante saber c\u00f3mo usar Composer para WordPress para que podamos escribir el c\u00f3digo de mayor calidad posible mientras nos aseguramos de cumplir con los est\u00e1ndares de codificaci\u00f3n que tambi\u00e9n hemos optado por emplear. .<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Esta es la \u00faltima de una serie de dos partes sobre c\u00f3mo configurar Composer para el desarrollo de WordPress para que pueda escribir c\u00f3digo de mayor calidad en su trabajo).<\/p>\n","protected":false},"author":1,"featured_media":223641,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,800,840],"tags":[1172],"class_list":["post-229481","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-php-2","category-tutoriales","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229481","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=229481"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229481\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/223641"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=229481"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=229481"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=229481"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}