优化垫片配置

时间:2013-10-31 09:52:21

标签: javascript requirejs

有没有办法做一些像

这样的事情
shim: {
        bsAlert || bsTooltip || dbDropdown: {
            deps: ['jquery']
        }
    }

而不是关注

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

我的垫片列表太长了;有什么办法,我可以使用逻辑运算符或正则表达式来优化我的填充程序配置吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);