Rails Sprockets e CommonJS
Che ci piaccia o no, il frammentato mondo javascript riguarderà sempre più il mondo server-side, quindi anche l'ecosistema Ruby on Rails che infatti dalla versione 3.1 inizia ad avere come dipendenza Coffeescript e quindi un compilatore javascript come Node.JS o V8.
Nella mia presentazione al Ruby Day su Rails e Spine.JS ho provato a delineare un po' questo "nuovo mondo" di siti web e webapp, pro e contro e come adattare le proprie conoscenze e pattern al lato client.
L'obiettivo di questo post è quello di provare a far luce su alcune questioni fumose, legate soprattutto al mondo javascript, se conoscete altre strade lungimiranti e percorribili proponete pure!
Webapps vs Websites
Da una parte abbiamo un approccio nuovo e scattante, dall'altra abbiamo un approccio maturo server-side, facilmente indicizzabile. La sfida non sta nel rifare come webapp tutti i siti web, ma nell'integrazione tra le 2 tecniche.
Framework MVC MV* Javascript e templating
Provenendo dal mondo ruby, i framework javascript sono moltissimi e con approcci molto diversi, ma il vero problema è che spesso non suggeriscono una struttura gerarchica, sono troppo legati a un sistema di templating oppure è difficile integrare pezzi di terze parti (mancato supporto a CommonJS/NPM)
Dipendenze Javascript
Per decenni le dipendenze javascript sono state gestite in stile "copia-incolla", Spaghetti code, e tuttora ci sono vari stili di chiamate asincrone, Rails con l'introduzione dell' Assets Pipeline e Sprockets ha provato a risolvere questo problema. Ma che dire.. si tratta di una soluzione ruby per un problema javascript.
NPM (Node Package Manager) insieme a CommonJS permettono di ottenere (sia lato client che server(*)) un comportamento simile a quello che si ottiene con gem e bundler su ruby.
Il ponte: stitch_rails
Con la gem stitch_rails è possibile richiamare il codice js con CommonJS nell'assets pipeline.
(*) ovviamente se si vuole utilizzare npm per gestire le dipendenze anche client-side bisogna accertarsi che siano dipendenze supportate anche lato client.