RequireJS动态路径替换

时间:2013-10-21 15:43:37

标签: requirejs amd

我有一个requirejs模块,它用作来自不同JS文件的API的包装器:

apiWrapper.js

define([], function () {
    return {
        funcA: apiFuncA,
        funcB: apiFuncB
    };
});

它工作正常,但现在我有一些新的用例需要替换实现,例如而不是apiFuncA调用我自己的功能。但我不想触及我的代码中的其他地方,我会调用函数,例如apiWrapper.funcA(param)

我可以做以下事情:

define([], function () {
    return {
        funcA: function(){
            if(regularUseCase){
                return apiFuncA(arguments);
            } else {
                return (function myFuncAImplementation(params){
                    //my code, instead of the external API
                })(arguments);
            }
        },
        funcB: apiFuncB
    };
}); 

但我觉得它看起来不太好看。什么是更优雅的选择?有没有办法动态替换模块(apiWrapper)?目前,它在我的require.config路径定义中定义。可以在运行时更改此路径定义,以便我将另一个文件用作包装器吗?

1 个答案:

答案 0 :(得分:0)

首先,如果您使用Require.js,您可能希望在生产之前构建它。因此,重要的是您不要在运行时动态更新路径或依赖于运行时变量来定义路径,因为这将阻止您成功运行r.js.

有很多工具(requirejs插件),可以帮助您动态更改模块的路径或条件加载依赖项。

首先,您可以使用require.replace,允许您根据所做的检查更改模块URL的部分(或全部),而不会破坏构建。

如果您正在寻找polyfilling,那就是requirejs feature

此处列出了更多内容:https://github.com/jrburke/requirejs/wiki/Plugins