Come memorizzare le impostazioni di distribuzione di Node.js e i file di configurazione?
Sto lavorando su alcune applicazioni Node, e sto cercando un buon modello di memorizzazione delle impostazioni relative alla distribuzione. Nel mondo Django (da dove vengo), la pratica comune sarebbe quella di avere un file settings.py
contenente le impostazioni standard (fuso orario, ecc), e poi un local_settings.py
per le impostazioni specifiche di distribuzione, cioè con quale database parlare, quale socket memcache, indirizzo e-mail per gli amministratori e così via.
Ho cercato modelli simili per Node. Solo un file di configurazione sarebbe bello, così non deve essere bloccato con tutto il resto in app.js
, ma trovo importante avere un modo per avere una configurazione specifica del server in un file che non è nel controllo dei sorgenti. La stessa app potrebbe essere distribuita su diversi server con impostazioni selvaggiamente diverse, e avere a che fare con conflitti di fusione e tutto il resto non è la mia idea di divertimento.
Quindi c'è un qualche tipo di struttura/strumento per questo, o ognuno fa qualcosa da solo?
Uso un
package.json
per i miei pacchetti e unconfig.js
per la mia configurazione, che assomiglia:Carico la configurazione dal mio progetto:
e poi posso accedere alle mie cose da
config.db_host
,config.db_port
, ecc. Questo mi permette di utilizzare parametri hardcoded, o parametri memorizzati in variabili ambientali se non voglio memorizzare le password nel controllo delle fonti.Genero anche un
package.json
e inserisco una sezione di dipendenze:Quando clono il progetto sulla mia macchina locale, eseguo
npm install
per installare i pacchetti. Maggiori informazioni su questo qui.Il progetto è memorizzato in GitHub, con i telecomandi aggiunti per il mio server di produzione.
Molto più tardi, ho trovato un modulo Node.js abbastanza buono per gestire la configurazione: nconf.
Un semplice esempio:
Supporta anche la memorizzazione delle impostazioni in Redis, la scrittura di file di configurazione, e ha un'API abbastanza solida, ed è anche sostenuta da uno dei negozi Node.js più rispettati, Nodejitsu, come parte dell'iniziativa del framework Flatiron, quindi dovrebbe essere abbastanza a prova di futuro.
Controlla nconf su Github.
Si potrebbe anche guardare a node-config che carica il file di configurazione a seconda delle variabili $HOST e __$NODE_ENV__ (un po' come RoR): documentation.
Questo può essere abbastanza utile per diverse impostazioni di distribuzione (
sviluppo
,test
oproduzione
).