是否可以使用Require.js进行配置继承?

时间:2013-02-12 22:20:19

标签: jquery requirejs extend

我试图找出在Require.js中进行配置准继承的最佳方法。

我有一个root webapp,然后是他们自己的上下文中的子webapps,如下所示:

/
/configuration
/reporting

root(/)webapp将有一个基本的Require.js配置对象,然后配置和报告webapps将有自己的覆盖。我已经通过使用jQuery扩展方法使其工作,例如:

var rootConfig = {
    // lots of stuff here: paths, shim, and baseUrl
}
var localConfig = {
    paths: {
        // this app wants to have a different version, so override
        jqueryui: '/js/lib/ui/jquery-ui-1.8.22.custom.min'
    }
}

var mergedConfig = {};
$.extend(true, mergedConfig, rootConfig, localConfig);

require.config(mergedConfig);

这很好用,但它打破了Require.js范例,因为我必须在Require.js之外静态加载jQuery库。 任何想法如何更优雅地做到这一点?

我已经看过詹姆斯·伯克的多重例子,这些例子就是这样的,但我认为没有必要完全继承配置。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我最后只是从其他几个来源中剔除非jquery扩展函数,所以我可以在require.js之前加载jquery ...

var com = com || {};
com.my = com.my || {};
com.my.extend = function (obj1, obj2) {
for (var p in obj2) {
    try {
        if ( obj2[p].constructor == Object ) {
            obj1[p] = com.my.extend(obj1[p], obj2[p]);
        } else {
            obj1[p] = obj2[p];
        }
    } catch(e) {
        obj1[p] = obj2[p];
    }
}

return obj1;
}

...然后在调用require.config之前使用它来扩展/合并配置对象,例如:

// merge localConfig with the root config
var com.my.mergedConfig = 
com.my.extend(com.my.rootConfig, com.my.childConfig);

// apply the configuration to require.js
require.config(com.my.mergedConfig);

希望能帮助别人。