WordPress met Node, React, en GraphQL (Deel 1 – Inleiding)
Wat volgt is mijn poging om PHP te vervangen door Javascript in WordPress ontwikkeling.
UPDATE: Ik heb sindsdien een nieuwere versie van dit project gemaakt waarbij ik Vue gebruik in plaats van React. Lees er meer over!
Index:
Deel 2 – De setup
Deel 3 – Het schema
In de komende weken zal ik in een reeks artikelen uitleggen hoe ik Node.js en Express gebruik aan de achterkant met een GraphQL-server die is gekoppeld aan een MYSQL WordPress-database die Apollo gebruikt om gegevens op te halen en deze naar React-componenten te leiden. Maak je geen zorgen, ik gebruik nog steeds de beproefde WordPress admin interface.
Als dat klinkt als een mond vol, dan komt dat omdat het dat ook is. Het is een uitdaging geweest, vooral omdat dit mijn eerste uitstapje is naar GraphQL en Apollo. Dingen zullen veranderen. Verandering is goed.
Deze post zal uitleggen waarom.
WordPress is een reus. 25% van alle websites zijn gebouwd op WordPress. Het is een geweldig CMS, met een geweldige community, en geweldige ondersteuning. Het beheren van content is eenvoudig en dat is het belangrijkste doel van elk CMS.
Bij nclud ontwikkel ik dagelijks WordPress sites. Het beheren van WordPress websites is een traktatie. Ze ontwikkelen is dat niet. Ik zeg dit als een Javascript ontwikkelaar die heeft ervaren hoe isomorphic Javascript applicaties eruit zien en voelen. Javascript heeft me getwitterd. WordPress ontwikkeling niet.
Wat kan ik zeggen? Ik hou niet van PHP. Ik hou niet van sjablonen. Ik hou niet van “de lus”. Ik ben verwend geraakt door Node, Express, Webpack, React, Babel, en nu Graph QL en Apollo.
De voordelen van Javascript
Ik bekijk dit puur vanuit de kant van front-end ontwikkeling. Node en Express zijn geweldig, maar de belangrijkste drijfveer achter deze setup, voor mij, is de mogelijkheid om ES2015 te gebruiken met React en CSS-Modules.
De grootste uitdaging van het ontwikkelen en onderhouden van elke redelijk grote website of applicatie is de mogelijkheid om veranderingen (het toevoegen van nieuwe functies of het wijzigen van bestaande) netjes af te handelen zonder dingen te breken. Dit houdt meestal in dat je ervoor moet zorgen dat het toepassen of wijzigen van stijlen geen onbedoelde gevolgen heeft. Dit is een uitdaging aangezien CSS globally scoped is. Er zijn hele CSS methodologieën die zijn gemaakt om deze pijn te verzachten (SMACSS, BEM, etc.), maar ze hebben ofwel esoterische naamgeving conventies nodig, of vereisen dat je een ziljoen verschillende class namen onthoudt.
Met React, kunnen we CSS Modules gebruiken om lokaal scoped CSS te maken. Elke component heeft zijn eigen styling, die de mogelijkheid om CSS klassen samen te stellen voor andere stijlen, of een set van globale stijlen. Het is zeer krachtig. Het is ook niet mogelijk met WordPress.
Je kunt ook inline stijlen doen, JSXStyles gebruiken of talloze andere oplossingen – ik ben een fan van CSS Modules, dus dat is wat ik zal gebruiken.
Deze methode betekent ook dat React-componenten gemakkelijk tussen projecten kunnen worden uitgewisseld. Ze zijn herbruikbaar, pluggable. Omdat stijlen lokaal zijn toegewezen aan een component, kun je ze naar believen toevoegen en verwijderen zonder je zorgen te hoeven maken dat je iets anders kapot maakt.
Een ander voordeel is de mogelijkheid om applicatie- of websitestatus op een veel sierlijkere manier af te handelen. Met behulp van Apollo (waar ik in een andere post op in zal gaan) kunnen we niet alleen applicatie data beheren, maar ook de UI status. Te vaak zie ik in WordPress één groot javascript bestand dat events en interacties afhandelt voor een hele website. Te vaak zie ik in dat lange bestand tests om te zien of een element een klasse heeft die een animatie zou moeten triggeren. Dit leidt tot pijnlijk debuggen omdat de applicatiestatus niet consistent is.
Ten slotte kunnen we nu ook unit tests uitvoeren. Testen is belangrijk! Huzzah testen!