¿Cómo se almacenan los archivos de configuración de Node.js?
He estado trabajando en algunas aplicaciones Node, y he estado buscando un buen patrón para almacenar las configuraciones relacionadas con el despliegue. En el mundo de Django (de donde vengo), la práctica común sería tener un archivo settings.py
que contenga las configuraciones estándar (zona horaria, etc), y luego un local_settings.py
para las configuraciones específicas del despliegue, es decir, con qué base de datos hablar, qué socket de memcache, dirección de correo electrónico para los administradores y así sucesivamente.
He estado buscando patrones similares para Node. Sólo un archivo de configuración estaría bien, por lo que no tiene que ser atascado con todo lo demás en app.js
, pero me parece importante tener una manera de tener la configuración específica del servidor en un archivo que no está en el control de origen. La misma aplicación podría ser desplegada en diferentes servidores con configuraciones muy diferentes, y tener que lidiar con conflictos de fusión y todo eso no es mi idea de diversión.
¿Existe algún tipo de marco/herramienta para esto, o todo el mundo se limita a hackear algo por sí mismo?
Utilizo un
package.json
para mis paquetes y unconfig.js
para mi configuración, que tiene el aspecto siguienteCargo la configuración de mi proyecto:
y luego puedo acceder a mis cosas desde
config.db_host
,config.db_port
, etc... Esto me permite utilizar parámetros codificados, o parámetros almacenados en variables de entorno si no quiero almacenar las contraseñas en el control de origen.También genero un
package.json
e inserto una sección de dependencias:Cuando clono el proyecto en mi máquina local, ejecuto
npm install
para instalar los paquetes. Más información al respecto aquí.El proyecto está almacenado en GitHub, con remotas añadidas para mi servidor de producción.
Mucho más tarde, encontré un módulo de Node.js bastante bueno para gestionar la configuración: nconf.
Un ejemplo sencillo:
También soporta el almacenamiento de configuraciones en Redis, la escritura de archivos de configuración, y tiene una API bastante sólida, y también está respaldada por una de las tiendas más respetadas de Node.js, Nodejitsu, como parte de la iniciativa del marco Flatiron, por lo que debería ser bastante a prueba de futuro.
Echa un vistazo a nconf en Github.
También puede mirar a node-config que carga el archivo de configuración dependiendo de la variable $HOST y __$NODE_ENV__ (un poco como RoR) : documentation.
Esto puede ser bastante útil para diferentes configuraciones de despliegue (
desarrollo
,prueba
oproducción
).