多文件javascript库

时间:2013-08-26 13:39:17

标签: javascript requirejs

我正在编写一个包含多个模块/文件的库。其中一个文件(让我们称之为Main)取决于所有其他文件,因此当用户加载此文件时,整个库将被加载。

现在用户可以将我的所有库放在子文件夹中(让我们称之为subdir1),所以他配置了这样的requirejs:

require.config({
    paths: {
        "jquery": "Scripts/jquery-2.0.3.min",
        "knockout": "Scripts/knockout-2.3.0",
        "MyLib.Main": "subdir1/MyLib.Main"
    }
});

在这种情况下,subdir1 / MyLib.Main.js文件将加载正常,但如果此文件依赖于MyLib.Helper模块,那么requirejs将尝试从MyLib.Helper.js而不是subdir1 / MyLib.Helper加载它.js文件所在的位置。

有没有办法告诉requirejs从subdir1加载子模块?我知道我可以枚举配置中的所有模块,但这需要最终用户知道我的库的内部结构(这是不可接受的)。理想情况下,我应该能够枚举应该从MyLib.Main.js文件中的subdir1加载的所有模块(但请注意,此时我不能硬编码它将是subdir1)。

1 个答案:

答案 0 :(得分:1)

要求您的用户在其require配置中配置LIBNAME_PATH变量 然后使用此路径变量为您的所有路径添加前缀

示例:

require.config({
    paths: {
        "jquery": "Scripts/jquery-2.0.3.min",
        "knockout": "Scripts/knockout-2.3.0",
        "MyLib_PATH": "subdir1",
        "MyLib.Main": "subdir1/MyLib.Main"
    }
});

然后在subdir1/MyLib.Main中,您可能会遇到以下情况:

require.config({
    paths: {
        "MyLib.Helper": "MyLib_PATH/MyLib.Helper"  
    }
});

requirejs然后应该按照用户的配置将MyLib_PATH解析为正确的路径。

这是一个超级未经测试的草案,但我认为它应该有用。 这意味着您必须在库中使用此LIBNAME_PATH 无处不在的