AMD(特别是Require Js)如何跨多个模块捆绑依赖项

时间:2011-10-23 15:13:50

标签: requirejs js-amd

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

例如(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如何处理这种情况,是否会加载相同的框架两次?

任何帮助表示感谢。

亲切的问候, 标记

2 个答案:

答案 0 :(得分:6)

只会加载一次,上述两个模块都将获得'module-c'相同的模块值。

答案 1 :(得分:2)

对其他人有用 - 这是我遇到模块加载两次的情况:

对于以下项目结构:

~/prj/js/app/fileA.js
~/prj/js/app/util/fileB.js
~/prj/js/ext/publisher.js

RequireJs baseurl~/prj/js/app

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

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

但是fileB.js指的是具有不同路径的相同依赖:

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

简而言之,对于这两个文件,依赖路径是不同的,尽管依赖性位于同一位置。在这种情况下,publisher.js会被加载两次。

使用Firebug的Net标签查看加载两次:

dependency.js being loaded twice (firebug)

使用paths轻松修复此问题以配置外部文件夹路径(如require_js docs中所述):

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

设置paths后,依赖关系仅使用fileA.jsfileB.js加载一次,使用相同的依赖路径,如下所示:

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

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