1

我正在编写一个包含多个模块/文件的库。其中一个文件(我们称之为 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)。

4

1 回答 1

1

要求您的用户在他的要求配置中配置一个 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 任何地方使用它。

于 2013-08-26T13:47:16.763 回答