有没有办法做一些像
这样的事情shim: {
bsAlert || bsTooltip || dbDropdown: {
deps: ['jquery']
}
}
而不是关注
shim: {
bsAlert: {
deps: ['jquery']
},
bsTooltip: {
deps: ['jquery']
},
bsDropdown: {
deps: ['jquery']
}
}
我的垫片列表太长了;有什么办法,我可以使用逻辑运算符或正则表达式来优化我的填充程序配置吗?
答案 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);