javascript - 多文件 JavaScript 库

标签 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加载子模块?我知道我可以枚举配置中的所有这些模块,但这需要最终用户知道我的库的内部结构(这是 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/

相关文章:

javascript - Div 在展会上显示不正确

javascript - 未处理的拒绝 SequelizeConnectionRefusedError : connect ECONNREFUSED 127. 0.0.1:3306

javascript - 从多个 css 文件中检索要在下拉列表中显示的 CSS 类列表

jquery - 如何在 Require.JS 上下文中删除 jQuery "html"函数?

requirejs - 如何将 Magento2 与 RequireJS 一起使用?

javascript - 如何重命名或有选择地加载 angularJS?

javascript - 在网络墨卡托中以任意浮点缩放级别转换纬度/经度和像素?

javascript - 对象分配扩展对象的不可变数组

javascript - 有没有办法在 require.js 中动态设置基本 url?

javascript - Require.js 未捕获类型错误 : undefined is not a function