【问题标题】:Module naming in RequireJSRequireJS 中的模块命名
【发布时间】:2014-11-04 12:22:58
【问题描述】:

我们可以使用 AMD 兼容版本的 BackboneJS 和 UnderscoreJS

我查看了两者的 AMD 兼容库 (https://github.com/amdjs/),下面是使它们与 AMD 兼容的相关代码。

BackboneJS (AMD);

else if (typeof define === 'function' && define.amd) {
// AMD
define(['underscore', 'jquery', 'exports'], function(_, $, exports) {
// Export global even in AMD case in case this script is loaded with
// others that may still expect a global Backbone.
root.Backbone = factory(root, exports, _, $);
});

下划线JS(AMD);

 // AMD define happens at the end for compatibility with AMD loaders
// that don't enforce next-turn semantics on modules.
if (typeof define === 'function' && define.amd) {
define('underscore', function() {
return _;
});
}

现在要在我们的代码中使用这些 AMD 兼容库,我们说:

requirejs.config({
    enforceDefine: true,
    paths: {
        "jquery": "libs/jquery-1.8.3",
        "underscore": "libs/underscore-amd",
        "backbone": "libs/backbone-amd"
    }
});

现在我读到骨干模块的名称可以是任何名称,但下划线的名称必须是“下划线”,对于下划线,大写很重要。

为什么会根据库的定义方式有所不同?

【问题讨论】:

    标签: javascript backbone.js requirejs underscore.js js-amd


    【解决方案1】:

    define 函数可以使用或不使用正在定义的模块的名称来调用。此调用没有模块名称。它从一系列依赖项开始:

    define(['underscore', 'jquery', 'exports'], function(_, $, exports) {
    

    RequireJS 将根据出现define 的文件的基本名称或根据您在paths 配置中提供的名称来分配模块名称。您可以输入paths: { platypus: '... path to file' },您的模块将命名为platypus

    这个调用有一个模块名称:

    define('underscore', function() {
    

    它将模块命名为underscore。 (第一个参数不是数组,因此 RequireJS 将其解释为模块名称。)当名称设置为 define 时,它永远不会改变。所以当你把它作为一个依赖时,它必须被称为underscore。 (您可以在 RequireJS 配置中使用 map 重新映射名称,但最终模块名称固定为 underscore。)如果您尝试使用此模块使用上面的 platypus 示例,RequireJS 会生成错误,因为它会找到一个名为 underscore 的模块,但没有一个名为 platypus 的模块。

    在没有明确实质性理由的情况下在define调用中指定模块名称是不好的做法。 RequireJS recommends 的文档没有这样做:

    这些 [即模块名称] 通常由优化工具生成。您可以自己显式命名模块,但这会降低模块的可移植性——如果将文件移动到另一个目录,则需要更改名称。通常最好避免在模块名称中编码,而让优化工具在模块名称中烧录。优化工具需要添加名称,以便可以将多个模块捆绑在一个文件中,以便在浏览器中更快地加载。

    【讨论】:

    • 所以如果我理解正确,顺序/顺序是这样的......如果模块名称没有通过define()在模块内部定义(比如主干)......那么它被命名为根据路径中定义的内容(在执行 requirejs.config() 时)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多