{"id":229224,"date":"2022-11-13T15:23:00","date_gmt":"2022-11-13T12:23:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229224"},"modified":"2022-11-13T15:23:54","modified_gmt":"2022-11-13T12:23:54","slug":"kompozytor-dla-wordpressa-czesc-2","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/kompozytor-dla-wordpressa-czesc-2\/","title":{"rendered":"Kompozytor dla WordPressa, cz\u0119\u015b\u0107 2"},"content":{"rendered":"\n<p>W tym po\u015bcie podsumuj\u0119 to, czym zacz\u0105\u0142em si\u0119 <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/kompozytor-dla-wordpressa-czesc-1\/\" title=\"wczoraj\">wczoraj<\/a> dzieli\u0107: U\u017cywanie narz\u0119dzi i <a href=\"https:\/\/tommcfarlin.com\/tag\/libraries-for-wordpress-plugins\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">bibliotek<\/a>, kt\u00f3re udost\u0119pni\u0142em w po\u0142\u0105czeniu z Composerem, do sniffowania twoich zatwierdze\u0144 podczas rozwoju, zanim kod trafi do repozytorium.<\/p>\n<p>W idealnym przypadku zawsze b\u0119dziesz chcia\u0142 widzie\u0107 co\u015b takiego w swoim terminalu za ka\u017cdym razem, gdy zatwierdzisz sw\u00f3j kod:<\/p>\n<p>Ale nie zawsze tak jest. Podobnie jak w przypadku wi\u0119kszo\u015bci rzeczy, im wi\u0119cej \u0107wiczysz, tym bardziej przyzwyczaisz si\u0119 do pisania kodu, kt\u00f3ry automatycznie przeka\u017ce r\u00f3\u017cne sniffy wprowadzone przez r\u00f3\u017cne regu\u0142y (i ich dostosowania).<\/p>\n<p>Jednak zanim to zrobisz, musisz skonfigurowa\u0107 GrumPHP w swoim repozytorium.<\/p>\n<h2>Kompozytor dla WordPressa: Sniffing Commits<\/h2>\n<p>Wczoraj dostarczy\u0142em pr\u00f3bk\u0119 <code>composer.json<\/code>\u00a0, wi\u0119c dzisiaj przyjrzymy si\u0119 przyk\u0142adowemu plikowi konfiguracyjnemu GrumPHP i przyjrzymy si\u0119, co robi ka\u017cda cz\u0119\u015b\u0107.<\/p>\n<p>Nale\u017cy zauwa\u017cy\u0107, \u017ce chocia\u017c niekt\u00f3re z tego, co zobaczysz, nie s\u0105 nietypowe dla projektu, mo\u017cesz dostroi\u0107 to tak bardzo, jak chcesz dla ka\u017cdego u\u017cywanego projektu. Czasami mo\u017cesz chcie\u0107, aby by\u0142 bardziej skoncentrowany ni\u017c jest teraz; innym razem mo\u017cesz nie dba\u0107 o niekt\u00f3re z oferowanych przez ni\u0105 w\u0105ch\u00f3w.<\/p>\n<h3>Konfiguracja pocz\u0105tkowa<\/h3>\n<p>To powiedziawszy, po zainstalowaniu GrumPHP utworzy prawie pusty <code>grumphp.yml<\/code>plik, kt\u00f3ry jest gotowy do skonfigurowania. Na przyk\u0142ad <a href=\"https:\/\/gist.github.com\/tommcfarlin\/ab0cd032408fdc5cc30c035d77ea49ba#file-00-initial-grumphp-yml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">oto, co powiniene\u015b zobaczy\u0107<\/a> :<\/p>\n<pre><code>parameters:\n    git_dir:. bin_dir: vendor\/bin\n    tasks:<\/code><\/pre>\n<p>Zauwa\u017c, \u017ce nie ma nic poza okre\u015bleniem:<\/p>\n<ul>\n<li>lokalizacja repozytorium,<\/li>\n<li>lokalizacja plik\u00f3w binarnych zainstalowanych przez Composer,<\/li>\n<li>zadania do uruchomienia.<\/li>\n<\/ul>\n<p>Zauwa\u017c, \u017ce zawsze u\u017cywa\u0142em \u201e.&quot; dla lokalizacji mojego repozytorium, poniewa\u017c nigdy nie instalowa\u0142em go w repozytorium, w kt\u00f3rym pracuj\u0119.<\/p>\n<p>To samo dotyczy plik\u00f3w binarnych Composer. Oznacza to, \u017ce po zainstalowaniu wszystkiego przez Composer zostawiam je w ich pocz\u0105tkowych lokalizacjach.<\/p>\n<p>I wreszcie, pocz\u0105tkowa <code>tasks<\/code>dyrektywa jest pusta, poniewa\u017c nie ma jeszcze nic do uruchomienia. Na to b\u0119d\u0119 si\u0119 przygl\u0105da\u0142 w nast\u0119pnym kroku.<\/p>\n<h3>Konfiguracja GrumPHP<\/h3>\n<p>Gdy masz ju\u017c zainstalowane biblioteki i jeste\u015b gotowy do konfiguracji, by\u0107 mo\u017ce mo\u017cesz zrobi\u0107 co\u015b <a href=\"https:\/\/gist.github.com\/tommcfarlin\/ab0cd032408fdc5cc30c035d77ea49ba#file-01-sample-grumphp-yml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">takiego<\/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>Nie b\u0119d\u0119 opisywa\u0107 wszystkiego powy\u017cej (poniewa\u017c nie ma wiele do nakre\u015blenia), ale wci\u0105\u017c jest kilka rzeczy do podkre\u015blenia:<\/p>\n<ul>\n<li>Zauwa\u017c, \u017ce istnieje znacznie d\u0142u\u017csza lista zada\u0144 ni\u017c ta, kt\u00f3ra zosta\u0142a zdefiniowana w pocz\u0105tkowym katalogu. To normalne i oznacza to, \u017ce chcemy uruchomi\u0107 te narz\u0119dzia przy u\u017cyciu domy\u015blnej konfiguracji dla ka\u017cdego z tych narz\u0119dzi.<\/li>\n<li>Kilka zasad ma <code>~<\/code>obok siebie. Zale\u017cy to od zadania, o kt\u00f3rym mowa, ale zwykle oznacza to, \u017ce chcemy u\u017cy\u0107 domy\u015blnej konfiguracji.<\/li>\n<li>S\u0105 takie zadania, <code>phpparser<\/code>kt\u00f3re maj\u0105 podzadania. Niekt\u00f3re z nich, jak wida\u0107 powy\u017cej, korzystaj\u0105 z zachowania domy\u015blnego. Inni wybieraj\u0105 terminy na czarnej li\u015bcie, takie jak <code>die<\/code>, <code>var_dump<\/code>, <code>exit<\/code>i inne. Oznacza to, \u017ce tak jakby dyrektywa nie by\u0142a wystarczaj\u0105co jasna, spowodujemy, \u017ce GrumPHP nie powiedzie si\u0119, je\u015bli kt\u00f3rakolwiek z tych instrukcji zostanie wykryta.<\/li>\n<li>Podobnie sp\u00f3jrz na <code>phpmd<\/code>. Wskazuje to na zestaw regu\u0142, kt\u00f3rych u\u017cyjemy, szukaj\u0105c r\u00f3\u017cnych ba\u0142agan\u00f3w w kodzie. W tym przypadku wskazuje na <code>dist<\/code>\u00a0plik, ale mo\u017ce wskazywa\u0107 na dowolny niestandardowy zestaw regu\u0142, kt\u00f3ry zdefiniowa\u0142e\u015b.<\/li>\n<\/ul>\n<p>To tylko pr\u00f3bka tego, co mo\u017cesz zrobi\u0107 z GrumPHP. Oznacza to, \u017ce mo\u017cesz zainstalowa\u0107 niekt\u00f3re biblioteki przez Composer, zainstalowa\u0107 je, a nast\u0119pnie dostosowa\u0107 GrumPHP tak, aby wykorzysta\u0107 jego funkcjonalno\u015b\u0107.<\/p>\n<p>Podobnie jak w przypadku innych podobnych projekt\u00f3w, gor\u0105co polecam przeczytanie <a href=\"https:\/\/github.com\/phpro\/grumphp\/blob\/master\/doc\/tasks.md\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentacji<\/a>, kt\u00f3ra istnieje dla r\u00f3\u017cnych zada\u0144, kt\u00f3re integruj\u0105 si\u0119 z GrumPHP.<\/p>\n<h2>To jest Kompozytor dla WordPressa?<\/h2>\n<p>Tak i nie. <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a> to mened\u017cer pakiet\u00f3w og\u00f3lnego przeznaczenia dla projekt\u00f3w PHP; jednak wydaje si\u0119, \u017ce nie widzimy tego zbyt cz\u0119sto w \u015bwiecie WordPressa. Nie oznacza to, \u017ce nie jest on u\u017cywany (jest), ale samo bycie \u015bwiadomym Composera i tego, jak go u\u017cywa\u0107, nie wystarczy.<\/p>\n<p>Zamiast tego uwa\u017cam, \u017ce wa\u017cne jest, aby wiedzie\u0107, jak korzysta\u0107 z Composera dla WordPressa, aby\u015bmy byli w stanie pisa\u0107 kod o najwy\u017cszej mo\u017cliwej jako\u015bci, jednocze\u015bnie upewniaj\u0105c si\u0119, \u017ce przestrzegamy wszelkich standard\u00f3w kodowania, kt\u00f3re r\u00f3wnie\u017c zdecydowali\u015bmy si\u0119 zastosowa\u0107 .<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>To ostatnia z dwucz\u0119\u015bciowej serii, jak skonfigurowa\u0107 Composer do programowania WordPress, aby m\u00f3c pisa\u0107 kod wy\u017cszej jako\u015bci w swojej pracy).<\/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":[721,897,805,845],"tags":[1169],"class_list":["post-229224","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-php-7","category-samouczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=229224"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229224\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/223641"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=229224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=229224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=229224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}