2

我希望将 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 吗?

4

1 回答 1

3

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

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”相同,您就不必采取任何其他预防措施。

于 2013-06-17T08:18:14.480 回答