2013-02-02 59 views
1

我開始了我的第一個大型JavaScript項目!我有一個關於部署的問題。我正在使用ajax調用web服務。要設置這個,我有一個靜態的JS文件,代碼如下:Javascript構建工具在生產/部署之間切換網址/變量

var API_URL_ROOT = 'http://api.example.com/'; 

var IN_DEVELOPMENT = True; 
if (IN_DEVELOPMENT) { 
    API_URL_ROOT = 'http://localhost.com/api'; 
} 

$.get(API_URL_ROOT) 

我正在使用python/fabric進行部署。 我想知道是否有任何預編譯的工具來處理JavaScript文件的靜態分析/操作。,現在它的葉子切換到commiters

我正打算在部署過程中,如:

  1. 問題部署命令
  2. 「構建」 JS,所有值設置爲生產值(即。IN_DEVELOPMENT = False
  3. 縮減大小JS
  4. 部署代碼到生產服務器

我正在考慮使用sed或其他東西來替換IN_DEVELPMENT = False。我已經看過一些流行的縮小工具,但似乎沒有提供這種功能。

我會假設這是一個應用程序很常見的問題。它通常如何處理?任何幫助,將不勝感激。謝謝

我最近在hackernews讀取article從Mozilla的:

在Mozilla假面代碼庫,我們經常暴露難以 測試私有函數的公共接口,清楚地標明瞭 額外功能測試API的一部分。雖然其他開發者仍然可以調用這些私有函數,但作者的意圖 已清楚。之間

... 
publicFunction: function() { 
    return "publicFunction can be invoked externally but " 
      + privateFunction(); 
} 

// BEGIN TESTING API 
, 
privateFunction: privateFunction 
// END TESTING API 
}; 

// privateFunction is now accessible via the TESTING API 
function privateFunction() { 
... 

典//開始測試API和// END測試API 僞標記可以在生產過程中生成過程被去除。

所以其他公司肯定是這樣做的。是否有預製工具來促進可以移除此代碼的JS構建過程?我瞥了一眼他們在github上的一些項目,但沒有看到任何項目。謝謝

回答

3

我們正在使用的道場

而且在道場,你可以使用條件排除您的js的內部版本,以排除您不希望您的構建JS代碼的部分。希望這可以幫助。

如:

var API_URL_ROOT = 'http://api.example.com/'; 

//>>excludeStart("dev",!pragmas.dev); 
    var IN_DEVELOPMENT = True; 
//>>excludeEnd("dev"); 

if (IN_DEVELOPMENT) { 
    API_URL_ROOT = 'http://localhost.com/api'; 
} 

$.get(API_URL_ROOT) 
+0

http://dojotoolkit.org/reference-guide/1.8/build/exclude.html – Redian

+0

哇非常強大謝謝!我從來沒有使用dojo我必須檢查出來 – dm03514