{"id":229135,"date":"2022-11-13T14:59:00","date_gmt":"2022-11-13T11:59:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229135"},"modified":"2022-11-13T14:59:01","modified_gmt":"2022-11-13T11:59:01","slug":"kompositoer-foer-wordpress-del-2","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/kompositoer-foer-wordpress-del-2\/","title":{"rendered":"Komposit\u00f6r f\u00f6r WordPress, del 2"},"content":{"rendered":"\n<p>I det h\u00e4r inl\u00e4gget ska jag sammanfatta det jag b\u00f6rjade dela med mig av <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/kompositoer-foer-wordpress-del-1\/\" title=\"ig\u00e5r\">ig\u00e5r<\/a>: Anv\u00e4nda verktygen och <a href=\"https:\/\/tommcfarlin.com\/tag\/libraries-for-wordpress-plugins\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">biblioteken<\/a> jag har delat i samband med Composer f\u00f6r att sniffa dina commits under utvecklingen innan koden tr\u00e4ffar f\u00f6rvaret.<\/p>\n<p>Helst kommer du alltid att vilja se n\u00e5got s\u00e5nt h\u00e4r i din terminal n\u00e4r du anger din kod:<\/p>\n<p>Men s\u00e5 \u00e4r det inte alltid. Men som med de flesta saker, ju mer du \u00f6var, desto mer v\u00e4njer du dig vid att skriva kod som automatiskt kommer att passera de olika sniffarna som inf\u00f6rts genom de olika reglerna (och deras anpassningar).<\/p>\n<p>Innan du g\u00f6r det m\u00e5ste du dock konfigurera GrumPHP i ditt arkiv.<\/p>\n<h2>Komposit\u00f6r f\u00f6r WordPress: Sniffing Commits<\/h2>\n<p>Ig\u00e5r tillhandah\u00f6ll jag ett prov <code>composer.json<\/code>\u00a0s\u00e5 idag ska vi titta p\u00e5 ett exempel p\u00e5 en GrumPHP-konfigurationsfil och titta p\u00e5 vad varje del g\u00f6r.<\/p>\n<p>Det viktiga att notera \u00e4r att \u00e4ven om en del av det du kommer att se inte \u00e4r atypiskt f\u00f6r ett projekt, kan du finjustera detta s\u00e5 mycket du vill f\u00f6r varje projekt du anv\u00e4nder. Ibland kanske du vill att det ska vara mer fokuserat \u00e4n det \u00e4r nu; andra g\u00e5nger kanske du inte bryr dig om n\u00e5gra av sniffarna som den erbjuder.<\/p>\n<h3>En initial konfiguration<\/h3>\n<p>Som sagt, efter att GrumPHP har installerats, kommer det att skapa en n\u00e4stan tom <code>grumphp.yml<\/code>fil som \u00e4r redo att konfigureras. Det <a href=\"https:\/\/gist.github.com\/tommcfarlin\/ab0cd032408fdc5cc30c035d77ea49ba#file-00-initial-grumphp-yml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">h\u00e4r \u00e4r till exempel vad du b\u00f6r se<\/a> :<\/p>\n<pre><code>parameters:\n    git_dir:. bin_dir: vendor\/bin\n    tasks:<\/code><\/pre>\n<p>Observera att det inte \u00e4r n\u00e5got annat \u00e4n att specificera:<\/p>\n<ul>\n<li>platsen f\u00f6r f\u00f6rvaret,<\/li>\n<li>platsen f\u00f6r bin\u00e4rfilerna installerade via Composer,<\/li>\n<li>uppgifterna att k\u00f6ra.<\/li>\n<\/ul>\n<p>Observera att jag alltid har anv\u00e4nt &#8217;.&#8217; f\u00f6r platsen f\u00f6r mitt arkiv eftersom jag aldrig har installerat det i arkivet som jag arbetar.<\/p>\n<p>Detsamma g\u00e4ller f\u00f6r Composer-bin\u00e4rfilerna. Det vill s\u00e4ga, efter att jag installerat allt via Composer, l\u00e4mnar jag dem p\u00e5 deras ursprungliga platser.<\/p>\n<p>Och slutligen, det ursprungliga <code>tasks<\/code>direktivet \u00e4r tomt eftersom det faktiskt inte finns n\u00e5got att k\u00f6ra \u00e4nnu. Det \u00e4r vad jag kommer att titta p\u00e5 i n\u00e4sta steg.<\/p>\n<h3>Konfigurera GrumPHP<\/h3>\n<p>N\u00e4r du v\u00e4l har installerat dina bibliotek och \u00e4r redo att st\u00e4lla in lite konfiguration, kanske du kan g\u00f6ra n\u00e5got <a href=\"https:\/\/gist.github.com\/tommcfarlin\/ab0cd032408fdc5cc30c035d77ea49ba#file-01-sample-grumphp-yml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r<\/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>Jag kommer inte att beskriva allt ovan (eftersom det inte finns mycket att beskriva) men det finns fortfarande n\u00e5gra saker att p\u00e5peka:<\/p>\n<ul>\n<li>Observera att det finns en mycket l\u00e4ngre lista med uppgifter \u00e4n vad som definierades i den ursprungliga katalogen. Det \u00e4r normalt, och det betyder att vi vill k\u00f6ra dessa verktyg med standardkonfigurationen f\u00f6r vart och ett av dessa verktyg.<\/li>\n<li>N\u00e5gra av reglerna har en <code>~<\/code>bredvid sig. Detta beror p\u00e5 uppgiften i fr\u00e5ga, men det betyder vanligtvis att vi vill anv\u00e4nda standardkonfigurationen.<\/li>\n<li>Det finns s\u00e5dana uppgifter som <code>phpparser<\/code>har deluppgifter. Vissa av dem, som du kan se ovan, anv\u00e4nder standardbeteende. Andra v\u00e4ljer att svartlista termer som <code>die<\/code>, <code>var_dump<\/code>, <code>exit<\/code>, och mer. Det betyder, som om direktivet inte var tillr\u00e4ckligt tydligt, att vi kommer att f\u00e5 GrumPHP att misslyckas om n\u00e5got av dessa uttalanden uppt\u00e4cks.<\/li>\n<li>P\u00e5 samma s\u00e4tt, ta en titt p\u00e5 <code>phpmd<\/code>. Detta pekar p\u00e5 upps\u00e4ttningen regler som vi kommer att anv\u00e4nda n\u00e4r vi letar efter olika r\u00f6ror i koden. I det h\u00e4r fallet pekar den p\u00e5 en <code>dist<\/code>\u00a0fil men kan peka p\u00e5 alla anpassade regler som du har definierat.<\/li>\n<\/ul>\n<p>Det h\u00e4r \u00e4r bara ett exempel p\u00e5 vad du kan g\u00f6ra med GrumPHP. Det vill s\u00e4ga, du kan installera vissa bibliotek via Composer, installera dem och sedan skr\u00e4ddarsy GrumPHP s\u00e5 att du drar nytta av den funktionalitet det tillhandah\u00e5lls.<\/p>\n<p>Som med andra liknande projekt rekommenderar jag starkt att l\u00e4sa <a href=\"https:\/\/github.com\/phpro\/grumphp\/blob\/master\/doc\/tasks.md\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentationen<\/a> som finns f\u00f6r de olika uppgifterna som integreras med GrumPHP.<\/p>\n<h2>Detta \u00e4r Composer f\u00f6r WordPress?<\/h2>\n<p>Ja och nej. <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a> \u00e4r en generell pakethanterare f\u00f6r PHP-projekt; vi verkar dock inte se det mycket i WordPress-v\u00e4rlden. Detta betyder inte att det inte anv\u00e4nds (det \u00e4r det), men att bara vara medveten om Composer och hur man anv\u00e4nder den \u00e4r inte tillr\u00e4ckligt.<\/p>\n<p>Ist\u00e4llet tror jag att det \u00e4r viktigt att veta hur man anv\u00e4nder Composer f\u00f6r WordPress s\u00e5 att vi kan skriva h\u00f6gsta m\u00f6jliga kvalitetskod samtidigt som vi ser till att vi f\u00f6ljer de kodningsstandarder vi ocks\u00e5 har valt att anv\u00e4nda .<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Detta \u00e4r den sista i en serie i tv\u00e5 delar om hur du konfigurerar Composer f\u00f6r WordPress-utveckling s\u00e5 att du kan skriva kod av h\u00f6gre kvalitet i ditt arbete).<\/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":[848,901,807,724],"tags":[1173],"class_list":["post-229135","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-koda","category-php-9","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229135","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=229135"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229135\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/223641"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=229135"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=229135"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=229135"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}