【问题标题】:RequireJS Dynamic Paths ReplacementRequireJS 动态路径替换
【发布时间】:2013-10-21 15:43:37
【问题描述】:

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

【问题讨论】:

    标签: requirejs amd


    【解决方案1】:

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

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

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

    如果你正在寻找 polyfill,requirejs feature

    这里还有更多:https://github.com/jrburke/requirejs/wiki/Plugins

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 2013-01-10
      • 1970-01-01
      • 2014-07-13
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多