Am aflat cu surprindere că sunt oameni care nu mai sunt de mult timp la începutul carierei de WP dev, dar … care nu folosesc Composer.
Pe scurt, Composer e un manager de pachete, un ceva care te ajută să instalezi rapid diverse dependențe. Mai pe lung, este ceva mai mult de atât. Te poate ajuta să rulezi scripturi, să auto-încarci clase, să încarci fișiere șamd. Recomand o incursiune în documentație, este o adevărată aventură.
La ce folosesc eu Composer?§
- Instalarea dependențelor. În majoritatea proiectelor folosesc un wrapper pentru Handlebars (la care tot amân un refactor), Carbon Fields și extensiile mele pentru Carbon Fields.
- Încărcarea fișierelor. În loc să fac
require 'inc/fișier[1-9]+.php';
, le menționez încomposer.json
și gata. - Auto-încărcarea claselor. Pentru că nu-s tont să folosesc porcăria de coding style de la WP, mă axez mai mult pe PSR, iar PSR4 e ce am nevoie, mai ales că n-am nici o jenă în a folosi namespacing.
Cum folosesc Composer?§
După ce îl instalezi, faci un fișier numit composer.json
în folderul principal al proiectului. Acest fișier arată așa (un minimum):
{
"require": {
"ext-json": "*",
"jasongrimes/paginator": "~1.0"
},
"autoload": {
"psr-4": {
"ntz\\": "inc"
},
"files": [
"inc/utils/ajax_response.php",
}
}
După ce faci asta, în consolă, instalezi/inițializezi: composer install
.
În functions.php
(presupunând că ai o temă) adaugi și autoloaderul:
require_once 'vendor/autoload.php';
Și… cam asta e tot. Fișierele puse în array-ul files
vor fi încărcate în ordine, iar clasele care respectă un anumit pattern la nume, vor fi încărcate automat, atunci când le folosești.
Acest pattern pentru clase are câteva reguli:
- O clasă pe fișier, iar numele clasei se va regăsi în numele fișierului;
- Namespace-urile respectă structura de directoare începând de la
inc
.
De exemplu, poți avea namespace: ntz\rest\search
și o clasă numită FilterEntries
. Eh, clasa asta va avea path-ul inc/ntz/rest/search/FilterEntries.php
.
Orice clasă va fi încărcată automat dacă respectă acest pattern.
Deploy§
Problem principală a lui Alex era că e pe host shared și nu are cum să ruleze composer install
. Șmecheria e că poți rula oriunde această comandă, inclusiv pe local, după care urci tot folderul vendor
pe FTP.
Version Control§
La fel ca la node_modules
, folderul vendor
nu stă în VCS. Am eu un pitic, că nu păstrezi cod care nu e al tău Sigur, sunt și excepții (gen deploy automat pe Pantheon sau WPEngine, dar, de obicei, vrei aceste foldere să fie excluse.
Cam atât§
Este atât de comod tot sistemul încât orice proiect, oricât de mic ar fi, nu scapă fără composer. Alternativa este prea… 2000ish, mai bine nu.
Eu n-am mai atins un WP/PHP de vreo patru sau cinci ani, de aia nu știam cum funcționează Composer. De vreo doi ani, sînt cu JS și React. Ultima oară cînd mi-am redesenat tema de blog, acu’ vreo lună, mi-a fost atît de lene să o fac local, încît am editat CSS-ul și PHP-urile direct din editorul din admin (LiteSpeed cache, mnah, n-a simțit nimeni) – bine, asta e din cauză că n-am găsit un modul de VSCode care chiar să se conecteze la FTP, că pe local mi-era meh.
Always test your apps in production
@Alex Mihăileanu: Slabe sanse sa mai gasesti ceva pe ftp. Ai mai multe sanse cu SFTP. Parca am vazut un plugin de SFTP, dar pt PHPStorm
Foarte bune sfaturi găsesc în acest articol.