Hvordan lagre Node.js distribusjonsinnstillinger/konfigurasjonsfiler?
Jeg har jobbet med noen Node-apper, og jeg har lett etter et godt mønster for lagring av distribusjonsrelaterte innstillinger. I Django-verdenen (der jeg kommer fra) vil den vanlige praksisen være å ha en settings.py
fil som inneholder standardinnstillingene (tidssone osv.), Og deretter en local_settings.py
for distribusjonsspesifikke innstillinger, dvs. hvilken database du skal snakke med, hvilken memcache-socket, e-postadresse for administratorene og så videre.
Jeg har lett etter lignende mønstre for Node. Bare en konfigurasjonsfil ville være fint, slik at den ikke trenger å bli fastkjørt sammen med alt annet i app.js
, men jeg synes det er viktig å ha en måte å ha serverspesifikk konfigurasjon i en fil som ikke er i kildekontroll. Den samme appen kan godt distribueres på forskjellige servere med veldig forskjellige innstillinger, og å måtte håndtere flettekonflikter og alt det er ikke min idé om moro.
Så finnes det et slags rammeverk/verktøy for dette, eller må alle bare hacke sammen noe selv?
Jeg bruker en
package.json
for pakkene mine og enconfig.js
for konfigurasjonen min, som ser ut som:Jeg laster inn konfigurasjonen fra prosjektet mitt:
og så kan jeg få tilgang til tingene mine fra
config.db_host
,config.db_port
, etc.... Dette lar meg enten bruke hardkodede parametere, eller parametere lagret i miljøvariabler hvis jeg ikke vil lagre passord i kildekontrollen.Jeg genererer også en
pakke.json
og setter inn en avhengighetsseksjon:Når jeg kloner prosjektet til min lokale maskin, kjører jeg
npm install
for å installere pakkene. Mer info om det her.Prosjektet er lagret i GitHub, med fjernkontroller lagt til for produksjonsserveren min.
Mye senere fant jeg en ganske god Node.js-modul for å administrere konfigurasjon: nconf.
Et enkelt eksempel:
Det støtter også lagring av innstillinger i Redis, skrive konfigurasjonsfiler, og har en ganske solid API, og er også støttet av en av de mer respekterte Node.js butikker, Nodejitsu, som en del av Flatiron rammeverk initiativ, så det bør være ganske fremtidsrettet.
Sjekk ut nconf på Github.
Du kan også se på node-config som laster inn konfigurasjonsfilen avhengig av variablene $HOST og __$NODE_ENV__ (litt som RoR): documentation.
Dette kan være ganske nyttig for forskjellige distribusjonsinnstillinger (
utvikling
,test
ellerproduksjon
).