2

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

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

/
/configuration
/reporting

根 (/) 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 库。 任何想法如何更优雅地做到这一点?

我查看了 James Burke 的多页示例,这些示例有点类似于这些思路,但我认为这并不是要准确地继承配置。

谢谢你的帮助!

4

1 回答 1

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);

希望对其他人有所帮助。

于 2013-04-10T17:17:45.307 回答