Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RequireJS中的模块命名_Javascript_Backbone.js_Requirejs_Underscore.js_Js Amd - Fatal编程技术网

Javascript RequireJS中的模块命名

Javascript RequireJS中的模块命名,javascript,backbone.js,requirejs,underscore.js,js-amd,Javascript,Backbone.js,Requirejs,Underscore.js,Js Amd,我们可以使用与AMD兼容的BackboneJS和UndermarkeJS版本 我查看了AMD兼容库中的()和下面的相关代码,以使它们与AMD兼容 BackboneJS(AMD) AMD 现在在我们的代码中使用这些AMD兼容库,我们说 requirejs.config({ enforceDefine: true, paths: { "jquery": "libs/jquery-1.8.3", "underscore": "libs/underscor

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

我查看了AMD兼容库中的()和下面的相关代码,以使它们与AMD兼容

BackboneJS(AMD)

AMD

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

requirejs.config({
    enforceDefine: true,
    paths: {
        "jquery": "libs/jquery-1.8.3",
        "underscore": "libs/underscore-amd",
        "backbone": "libs/backbone-amd"
    }
});
现在我读到主干模块的名称可以是任何名称,但是下划线的名称必须是“下划线”,对于下划线,大写很重要


为什么差异取决于库的定义方式?

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

define(['underscore', 'jquery', 'exports'], function(_, $, exports) {
RequireJS将根据出现
define
的文件的基本名称或您在
路径
配置中给出的名称来分配模块名称。您可以将
路径:{platypus:'..path to file'}
放入,您的模块将命名为
platypus

此调用有一个模块名:

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

define
调用中指定模块名称而没有明确的实质性的原因是不好的做法。不这样做的RequireJS的文档:

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


因此,如果我理解正确,顺序/顺序如下……如果模块名称不是通过define()在模块内部定义的(比如主干)……那么它将按照路径中定义的名称命名(在执行requirejs.config()时)
define(['underscore', 'jquery', 'exports'], function(_, $, exports) {
define('underscore', function() {