使用requirejs加载模块的前缀

时间:2013-05-15 11:02:35

标签: javascript requirejs

我的应用程序有不同的模块,它们按以下方式请求文件:

var urlRepository = require('modules/common/urlrepository/urlrepository');

还需要使用以下方式的一些模块:

require(['modules/common/urlrepository/urlrepository'],function(urlrepository){
    });

现在,假设我在2个文件夹中有相同的结构,如:

    folder1
    |
    modules
    |
    common

    folder2
    |
    modules
    |
    common

有没有办法可以定义像currentFolder ="folder2"这样的全局变量 &安培;根据变量,它将加载相应的模块。

我不想更改每个文件中的现有代码。 我想要一些在我的要求电话之前附加的东西。

2 个答案:

答案 0 :(得分:0)

假设folder1和folder2是baseUrl目录的子代:

要使用folder1,请将其放在主js文件中:

require.config({paths: {"modules": "folder1/modules"}})

要使用folder2,请将其放入主js文件中:

require.config({paths: {"modules": "folder2/modules"}})

答案 1 :(得分:0)

不推荐,但我认为这可以通过在需求电话前放置代理来实现 您可以定义自己的require函数,从内部调用实际需求。您可以将更改设置为url,以便在您自己的需求中进行检索。

示例代码可以如下给出。

var oldrequire = require;
require = function(){
    var prefix = global.mode;
    if(typeof arguments[0]==='string'){
        oldrequire(prefix+arguments[0]);
        return;
    }
    var arr = arguments[0];
    if(arr instanceof Array){
        for(var index in arr){
            arr[index] = prefix+arr[index];
        }
        oldrequire(arguments);
    }
}

您可能还需要覆盖define函数,因为它使用相对要求来获取文件。

注意:再说一遍。建议不要这样做,因为您不确定特定需求调用的行为方式。