2012-07-12 62 views

回答

2

你的問題可以針對任何JavaScript應用,而不僅僅是一個骨幹應用程序,所以下面的答案是比較一般:

我要做的就是有一個config.js文件是在你的HTML中加載的第一件事。內容僅僅是一個帶有配置的JSON對象:

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

現在應用程序的每個組件都可以訪問配置,因爲CONFIG是一個全局對象。所以你可以在你的應用程序的任何地方寫這個:

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

訣竅是有2個config.js文件。一個用於開發,一個用於生產。當你想發佈你的應用程序時,將你的生產config.js文件打包並上傳到你的服務器。

您可以創建一個構建腳本來構建您的生產應用程序。作爲第一步,它可以將正確的config.js文件複製到正確的位置。您還可以添加步驟來縮小您的js文件,將它們捆綁到一個文件等中。

+0

謝謝您的幫助。理想情況下,我希望在git或任何版本控制系統中擁有整個應用程序,並且在沒有任何人工操作的情況下執行更新。如果錯誤地下載了生產配置文件,實時數據可能會受到影響,我們的客戶會非常不高興。 – user1521903 2012-07-12 21:39:48

11

我建議你有一個文件中這樣的方式:

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

然後在你的事業有這樣的事情:

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]; 
    } 
}; 

所以,你將有隻有一個文件,呼叫型動物API DB網址,你將需要調用只有一行:

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

我適應丹尼爾的NIC Ë答案的CoffeeScript/CommonJS的,所以在我config.coffee我:

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] 

然後客戶端代碼如下所示:

config = require("config") 
config.urlRoot