RequireJS动态路径替换

RequireJS动态路径替换,requirejs,amd,Requirejs,Amd,我有一个requirejs模块,用作来自不同JS文件的API的包装器: apiWrapper.js define([], function () { return { funcA: apiFuncA, funcB: apiFuncB }; }); 它工作得很好,但现在我有了一些新的用例,需要替换实现,例如,代替apiFuncA调用我自己的函数。但是我不想触及代码中调用函数的其他地方,比如apiWrapper.funcA(param) 我可以这样做

我有一个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路径定义中定义的。是否可以在运行时更改此路径定义,以便使用不同的文件作为包装器?

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

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

首先,您可以使用它来根据所做的检查更改模块URL的部分(或全部),而不破坏构建

如果你要找polyfilling,有

这里列出了更多: