2012-07-12 13 views

Respuesta

2

Su pregunta puede dirigirse a cualquier aplicación Javascript, no sólo una aplicación de columna vertebral, por lo que la siguiente respuesta es más general:

Lo que hago es tener un archivo que config.js es lo primero que se carga en tu HTML. El contenido es sólo un objeto JSON con la configuración:

var CONFIG = { 
    debug : false, 
    server : 'http://production.foo.com' 
}; 

Ahora cada componente de su aplicación puede acceder a la configuración desde Config es un objeto global. Para que pueda escribir esto en cualquier lugar de su aplicación:

if (CONFIG.debug) { 
    console.log('my debug stuff...'); 
} 

El truco es tener 2 archivos config.js. Uno para el desarrollo y otro para la producción. Cuando desee publicar su aplicación, agrupe su archivo config.js de producción y súbalo a su servidor.

Puede crear un script de compilación para crear su aplicación para producción. Como primer paso, podría copiar el archivo config.js correcto en la ubicación correcta. También puede agregar pasos para minimizar sus archivos js, agruparlos en un archivo y más.

+0

Gracias por su ayuda. Idealmente, quería tener toda la aplicación en git, o cualquier sistema de control de revisiones, y hacer una actualización sin ningún trabajo manual. Si por error alguien descarga el archivo de configuración de producción, los datos en vivo pueden verse comprometidos y nuestros clientes podrían estar muy descontentos. – user1521903

11

Te recomiendo tener un archivo de una manera como esto:

var YourProject = {}; 
YourProject.Config = { 
    Local : { 
    db : 'mysql:dumy:[email protected]', 
    relativeUrl : 'blabla', 
    otherConfig : '123456' 
    }, 
    Dev : { 
    db : 'mysql:dumy:[email protected]st', 
    relativeUrl : 'blabla', 
    otherConfig : '123456' 
    }, 
    Production : { 
    db : 'mysql:dumy:[email protected]', 
    relativeUrl : 'blabla', 
    otherConfig : '123456' 
    } 
} 

Y luego, en sus utilidades para tener algo como esto:

YourProject.ConfigHandler = { 
    getValue : function(key){ 
    var env; 
    switch(window.location.hostname){ 
     case "localhost": 
     case "127.0.0.1": 
     env = 'Local'; 
     break; 
     case "dev.yourdomain.com": 
     env = 'Dev'; 
     break; 
     case "yourdomain.com": 
     env = 'Production'; 
     break; 
     default: 
     throw('Unknown environment: ' + window.location.hostname); 
    } 
    return YourProject.Config[env][key]; 
    } 
}; 

Por lo que tendrá un solo archivo y para llamadas a las URL de la base de datos de la API, tendrá que llamar a una sola línea:

YourProject.ConfigHandler.getValue('db'); 
1

Adapte la nic de Daniel E Respuesta a CoffeeScript/CommonJS, así que en mi config.coffee tengo:

env = switch window.location.hostname 
    when "localhost", "127.0.0.1" 
    "development" 
    when "www.example.com", "example.com" 
    "production" 

config = 
    development: 
    urlRoot: "http://localhost:3000" 
    production: 
    urlRoot: "http://www.example.com" 

module.exports = config[env] 

Y a continuación, el código de cliente se parece a:

config = require("config") 
config.urlRoot 
Cuestiones relacionadas