我正在编写一个由多个模块/文件组成的库。其中一个文件(我们称之为 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加载子模块?我知道我可以枚举配置中的所有这些模块,但这需要最终用户知道我的库的内部结构(这是 Not Acceptable )。理想情况下,我应该能够以某种方式枚举应从 MyLib.Main.js 文件内的 subdir1 加载的所有模块(但请注意,此时我无法硬编码它将是 subdir1)。
最佳答案
要求您的用户在其需求配置中配置 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
解析为用户配置的正确路径。
这是一个未经测试的 super 草案,但我认为它应该有效。
这确实意味着您必须在库中的任何地方使用此LIBNAME_PATH
。
关于javascript - 多文件 JavaScript 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18445568/