AMD(特别是RequireJs)如何处理跨多个模块的依赖性

AMD(特别是RequireJs)如何处理跨多个模块的依赖性,requirejs,js-amd,Requirejs,Js Amd,我有我的主初始化脚本,它调用require(),其中一个依赖项是实用程序框架,但我通过require()指定的一些其他模块本身也将该框架定义为依赖项 例如(init.js): 在“模块a”中,我有: define(['module-c'], function(c){ // utilize module-c framework }); 那么AMD/RequireJs如何处理这个场景呢?它是否两次加载同一个框架 谢谢你的帮助 亲切问候,, 标记它将只加载一次,上述两个模块将为“模块c”获得

我有我的主初始化脚本,它调用require(),其中一个依赖项是实用程序框架,但我通过require()指定的一些其他模块本身也将该框架定义为依赖项

例如(init.js):

在“模块a”中,我有:

define(['module-c'], function(c){
    // utilize module-c framework
});
那么AMD/RequireJs如何处理这个场景呢?它是否两次加载同一个框架

谢谢你的帮助

亲切问候,,
标记

它将只加载一次,上述两个模块将为“模块c”获得相同的模块值。

如果它对其他模块有用-我遇到过这样一种情况,模块加载两次:

对于以下项目结构:

~/prj/js/app/fileA.js
~/prj/js/app/util/fileB.js
~/prj/js/ext/publisher.js
其中RequireJs
baseurl
~/prj/js/app

fileA.js
将外部(ext)依赖性
publisher.js
称为:

//fileA:
define(['../ext/publisher'], function(){});
但是
fileB.js
指的是具有不同路径的相同依赖性:

//fileB:
define(['../../ext/publisher'], function(){});
简而言之,对于这两个文件,虽然依赖关系位于同一位置,但依赖关系路径是不同的。在本例中,publisher.js将加载两次

使用Firebug的
Net
选项卡查看它加载两次:

使用
路径
配置外部文件夹路径(如中所述),可以轻松解决此问题:

设置
路径
后,使用
fileA.js
fileB.js
仅加载一次依赖项,这两种方法都使用相同的依赖项路径,如下所示:

//fileA:
define(['ext/publisher'], function(){});


非常感谢您的确认!这正是我所希望的,因为在我看来,指定每个模块内的依赖性更有意义,因为这意味着我可以将该模块在完全不同的另一个项目中的其他地方重新使用。在内部,AMD加载程序跟踪(即缓存)所有模块。当模块被优化/连接在一起时,这并不有趣。但是,如果任何模块都是及时加载的,那么需要注意的是AMD加载程序会跟踪请求,这样两个几乎同时发生的请求就不会多次尝试下载同一模块。
requirejs.config({
    paths: {ext: '../ext'}
});
//fileA:
define(['ext/publisher'], function(){});
//fileB:
define(['ext/publisher'], function(){});