2013-10-31 85 views
1

有沒有辦法像做以下優化勻場片配置

shim: { 
     bsAlert || bsTooltip || dbDropdown: { 
      deps: ['jquery'] 
     } 
    } 

,而不是按照

shim: { 
     bsAlert: { 
      deps: ['jquery'] 
     }, 
     bsTooltip: { 
      deps: ['jquery'] 
     }, 
     bsDropdown: { 
      deps: ['jquery'] 
     } 
    } 

我墊片名單越來越過長;有沒有什麼辦法,我可以使用邏輯運算符或正則表達式來優化我的勻場配置?

回答

1

添加到@ Louis-Dominique Dubeau答案。 convert config的定義如下。

define("convert_config", function(){ 
    function convert_config(config){ 
     for(var index in config.shim){ 
      if(index.indexOf("||")!=-1){ 
       var keys = index.split("||"); 
       for(var i=0; i<keys.length; i++){ 
        config.shim[keys[i]] = config.shim[index]; 
       } 
       delete config.shim[index] 
      } 
     } 
     return config; 
    } 
    return convert_config; 
}) 

var convert_config = require("convert_config"); 
var config = { 
    baseURL: "lib", 
    paths: {}, 
    shim: { 
     moduleA: {}, 
     "bsAlert || bsTooltip || bsDropdown": { deps: ['jquery'] }, 
    } 
}; 
config = convert_config(config); 

require.config(config); 
2

您可能已經知道這一點,但爲此目的使用||將無法​​在普通JavaScript中使用。我不知道JavaScript的「擴展」語言(如CoffeeScript),它將允許您提出的內容。

但是,您傳遞給requirejs的配置對象可以動態構造。所以,你可以這樣做:

var config = { 
    baseURL: "lib", 
    paths: { ... }, 
    shim: { 
     moduleA: { ... } 
    } 
}; 

var s = config.shim; 
s.bsAlert = s.bsTooltip = s.bsDropdown = { deps: ['jquery'] }; 

require.config(config); 

如果你將需要做這個有很多,有可能寫這樣一個配置:

var config = { 
    baseURL: "lib", 
    paths: { ... }, 
    shim: { 
     moduleA: { ... } 
     "bsAlert || bsTooltip || bsDropdown": { deps: ['jquery'] }, 
    } 
}; 

,然後有一個功能走過config對象將形式爲「A || B」的鍵轉換爲requirejs在將對象傳遞給requirejs之前需要的內容。並且由於requirejs在多次配置時會合並配置,因此您可以使用類似的方法:

require.config({ 
    // ... minimal config allowing to find "convert_config" 
}); 

var convert_config = require("convert_config"); // module returns function 

var config = { 
    baseURL: "lib", 
    paths: { ... }, 
    shim: { 
     moduleA: { ... }, 
     "bsAlert || bsTooltip || bsDropdown": { deps: ['jquery'] }, 
    } 
}; 

convert_config(config); // modifies object in-place 

require.config(config); // pass the full configuration to requirejs