9

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

例如(init.js):

require(['module-a', 'module-b', 'module-c'], function(a, b, c){
    // where module-c is the framework
});

然后在'module-a'中我有:

define(['module-c'], function(c){
    // utilize module-c framework
});

那么 AMD/RequireJs 是如何处理这种情况的,它会两次加载同一个框架吗?

任何帮助表示赞赏。

亲切的问候,马克

4

2 回答 2

6

它只会被加载一次,以上两个模块都会为“module-c”获得相同的模块值。

于 2011-10-23T15:51:30.840 回答
2

以防它对其他人有用 - 这是我遇到的一个模块被加载两次的情况:

对于以下项目结构:

~/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选项卡可以看到它加载了两次:

dependency.js 被加载两次(萤火虫)

paths使用配置外部文件夹路径很容易解决此问题(如require_js 文档中所述):

requirejs.config({
    paths: {ext: '../ext'}
});

设置后paths,依赖项仅加载一次,fileA.js并且fileB.js都使用相同的依赖项路径,如下所示:

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

//fileB:
define(['ext/publisher'], function(){});
于 2012-08-16T05:44:46.850 回答