Require.js可选模块加载

时间:2013-06-17 08:15:09

标签: javascript requirejs

我希望将Require.JS集成到我的项目中,这需要能够根据客户端切换依赖项。

目前我有一些使用网络工作者执行的后台处理,将来我希望选择在服务器上执行处理,这只需要更换模块。

目前我唯一能想到的方法是在我的主脚本文件中包含以下伪代码:

var modules = [];
// This would be done with Modernizr or with a simple hasOwnProperty check
if(window.hasFeature('web-workers') {
    modules = ["other-dependencies", "webworker-calc"];
} else {
    modules = ["other-dependencies", "server-calc"];
}
require(modules, function (deps, calc) { // Code goes here };

这样做有更干净的方法吗?我可以比上面的例子更多地利用Require.JS吗?

1 个答案:

答案 0 :(得分:3)

您可以通过以太方调用require.config来设置require.js的配置,或者在获取require.js源文件之前设置全局require对象:

require.config({
    paths: {
        'calc-lib': window.hasFeature('web-workers') ? 'webworker-calc' : 'server-calc'
    }
});

或者:

<script>
    var require = { paths: {...} }
</script>
<script src="require.js" data-main="script/main"></script>

然后以“正常”方式和r.js可压缩方式要求它:

require(["other-dependencies", "calc-lib"], function (deps, calc) { 
    // Code goes here
});

只要两个文件的“api”相同,您就不必采取任何其他预防措施。