1

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

4

1 回答 1

0

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

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

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

如果您正在寻找 polyfill,则需要requirejs 功能

这里列出了更多:https ://github.com/jrburke/requirejs/wiki/Plugins

于 2013-10-21T17:03:03.677 回答