Dat is vaak lastiger dan dat jet het doe voorkomen. Het selectief (her) gebruiken van bepaalde code is natuurlijk prima, het is vaak echter lastig om een library op zo'n manier te gebruiken.
Bootstrap ondersteund dit (losse sass libs inladen/zelf bootstrap samenstellen) maar dat maakt de re-use documentatie van veel componenten weer lastige. Moet je eerst je Bootstrap install weer uitbouwen.
Verder weet bijna elke programmeur dat globals evil zijn. Tag selectors als "h1", "p" en "li" op root niveau zijn gewoon globals, je kan ze "bitters" of "atoms" noemen maar het zijn nog steeds globals met alle nadelen van dien. Ik snap niet zo goed waarom dat in frontend land voor lief genomen wordt.
Bootstrap stikt van de globals en het inladen van Bootstrap breekt vaak genoeg andere componenten doordat die de styling van bootstrap oppakt.
R2D2 schreef op donderdag 13 oktober 2016 @ 14:32:
Nu zit ik zelf bij een grote uitgever en wat ik in de kleine 3 jaar dat ik hier zit veel heb zien gebeuren is dat iedere front-end developer denkt zelf het wiel opnieuw uit te moeten vinden. Ik heb al meerdere zelf in elkaar geknutselde of exotische frameworks voorbij zien komen en er mankeert altijd wel wat aan.
Ik ben nu zelf bezig met een rebuild van Schoolbank (ja het bestaat nog) en daar heb ik gewoon lekker Foundation for sites onder geschoven, niet alleen lekker makkelijk omdat het "vervelende werk" al gedaan is maar alle documentatie e.d. staat gewoon online wat betekent dat ik het niet hoef te schrijven.
Eens, het heeft geen zin om alles opnieuw te schrijven, ik ben ok zeker niet tegen het gebruik van libraries, ik gebruiker er genoeg. Om wat te noemen:
- Aurelia/React voor dynamische frontends
- Webpack foor bundling
- Babel voor transpiling
- Aurelia HTTP client voor ajax (met een custom npm lib wrapper erover voor OOP)
- Jasmine voor tests
- ... whatever fits the purpose
Verder maken we veel gebruik van bestaande patterns/methodieken. In ons geval werken we met BEM met een custom npm lib voor selectie/manipulatie (van modifiers). De reden dat we niet een bestaande BEM library is dat we een functioneel geschreven (stateless) library willen die geen <insert class/function name here> object teruggeeft maar gewoon een HTMLElement. Forwards compatibility is wel een handige feature in het "low level" deel van de applicatie.
Hier zijn bestaande ideeen en eigen libraries dus samengegaan. Overigens ook gewoon netjes gepublished/gedocumenteerd (
https://www.npmjs.com/package/bem.js)
R2D2 schreef op donderdag 13 oktober 2016 @ 14:32:
Daarnaast is het voordeel van een framework wat al even bestaat dat de meeste cross browser issues e.d. er al uit gehaald zijn... scheelt mij weer tijd die ik aan een leuke feature kan besteden.
Het ligt er aan welke browser je target, als je een beetje een moderne support set target is compatibility nauwelijks een issue meer. Kwestie van autoprefixer aan je sass straat hangen en optioneel babel polyfill als je moderne dingen in JS wil doen.
R2D2 schreef op donderdag 13 oktober 2016 @ 14:32:
Denken dat je zelf nog een grid framework moet gaan zitten bouwen e.d. is allemaal leuk en aardig maar echt een "waste of time" in mijn ogen. Naar mijn mening pak je gewoon iets wat op de plank ligt en wat goed in elkaar zit. Zelf iets gaan proberen te bouwen loopt vaak op niets meer uit dan een beetje "gekloot in de marge" als je het mij vraagt.
Niet perse, wij maken vaak gebruik van Bourbon Neat (zonder Bourbon zelf) maar dat werkt niet voor elk project. Ik werk in sass/css volgens een pattern dat zich misschien nog het beste laat vergelijken met lexical scoping (misschien in omgekeerde vorm). Lang verhaal kort: elk block kan alleen iets zeggen
binnen zijn eigen box model, niet erbuiten, dus ook geen margins om een blok zelf, alleen op child blocks. Uiteindelijk laat ik een "view block" de verschillende componenten uitlijnen.
Deze methodiek werkt erg goed als je modulaire websites bouwt waarbij de componenten opnieuw gesorteerd moeten kunnen worden. Ook voorkomt het dat het aanpassen van A invloed heeft op B. Het is alleen niet echt compatible met neat omdat Neat omdat dit grid graag marges zet voor "gutters". Dit is soms nuttig maar niet in het bovenstaande geval.
Als je de default styling van een framework teniet gaat doen met extra stijl regels ben je volgens mij niet echt efficient bezig. Dan ben je dus:
- Tijd kwijt met het installeren van een framework
- Tijd kwijt met het terugdraaien van de defaults
- Tijd kwijt met het bouwen wat je oorspronkelijk wou maken
Zonder framework ben je vaak met alleen de laatste klaar.
Ik wil niet zeggen dat er geen functie is voor frameworks als Bootstrap (of Foundation) maar voor 9/10 use cases ben (iig) sneller zonder en produceer ik efficiëntere/sneller/overzichtelijkere/meer herbruikbare code.
Het los downloaden van bestaande (web)components vind ik een veel beter idee. Iemand heeft bijvoorbeeld al een datepicker geïmplementeerd in React of iets anders. Dat is prima te downloaden zonder dat de rest van mn applicatie verandert.