12 Nov. 2014. Una delle prime cose, se non la prima, che si fa quando si prepara un progetto basato nodejs, è quello di impostare un file di configurazione, che di solito viene chiamato config.js
Con il crescere della complessità dell'applicazione, delle componenti (database e moduli vari) e dei diversi ambienti (sviluppo, produzione, staging, etc. etc.), può essere comodo utilizzare un modulo che agevoli nella impostazione di config, delle sue variabili e dei diversi valori che devono avere.
Una
ricerca della keyword "config" su npmjs.org , il repository dei moduli per nodejs, produce centinaia di risultati (o più precisamente 5 pagine da 100 risultati circa ognuna, anche se non tutti si riferiscono alla generica configurazione di nodejs, ma ad aspetti o funzionalità specifiche).
Tra questi si possono selezionare i seguenti:
Ma quale scegliere?
(spoiler: propongo convict)
I numeri su github
Un pò di numeri su github riassunti in una tabella:
| nconf | node-convict | rc | konphyg | figc |
| contributors |
25
| 12 | 11 | 5 | 1 |
| stars | 1343 | 194 | 195 | 90 | 11 |
| fork | 92 | 22 | 24 | 11 | 2 |
Su npmjs.org abbiamo invece questi numeri:
| nconf | convict | rc | konphyg | figc |
| downloads in the last month |
194k
| 7k | 532k | 1k | 0.5k |
| last updated | a year ago | 14 days ago | 9 days ago | 8 months ago | 2 years ago |
| Version | 0.6.9 | 0.5.1 | 0.5.4 | 1.4.0 | 0.0.3 |
Il numero di download si riferisce a metà novembre 2014
Ad una prima occhiata il vincente sembrerebbe essere nconf.
Ma sono solo indicatori, perché la scelta di un modulo piuttosto che un'altro si basa sulle proprie esigenze e come vengono soddisfatte.
Comunque i contendenti sui quali puntare potrebbero essere principalmente due:
nconf e
convict
Gli autori: Mozilla vs Nodejitsu
Anche se abbiamo visto dai numeri di github che nconf ha 25 contributors, il programmatore di riferimento è il NewYorkese
Charlie Robbins alias indexzero di
Nodejitsu.
L'autore di convict è invece la comunità di sviluppatori di
Mozilla, sicuramente una garanzia di qualità.
Bisogna considerare che dietro nconf c'è
Flatiron, un framework per costruire applicazioni con Node.js e forse per questo si spiegano numeri più alti di quelli fatti dal modulo di Mozilla.
E' comunque simpatico notare che sul blog di nodejitsu c'e'
un post di Marzo 2014 sul suo concorrente convict.
Alcune caratteristiche
Validation
Un file di configurazione sbagliato significa un sito che non funziona, per cui è comodo che i parametri possano essere controllati automaticamente da un validatore.
convict ha nativamente questa funzione, per nconf c'è comunque il plug-in
nconf-validator
Coercion
Convict forza le variabili al loro formato richiesto, per esempio nel caso di numeri passati come stringhe.
Chiarezza contro complessita'
Le configurazioni impostate con convict sembrano essere piu' chiare e leggibili rispetto a quelle di nconf. Anche se nconf ha le funzioni di impostazione separate ed utilizzabili liberamente, la rigidita' di convict in realta' rende la configurazione molto piu' chiara e piu' leggibile, e per questo piu' solida e meno soggetta a pasticci e conseguentemente bug: e quando si trasferiscono gli aggiornamenti dagli ambienti di sviluppo a quelli di test e poi in produzione, l'ultima cosa che si desidera e' quella di perdere tempo a capire perche' un deploy che funziona nell'ambiente di test non funziona invece nell'ambiente di produzione, le cui differenze dovrebbero essere chiare nel file di configurazione.
Alcuni articoli utili sul tema