我的主要初始化脚本调用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如何处理这种情况,是否会加载相同的框架两次?
任何帮助表示感谢。
亲切的问候, 标记
答案 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
标签查看加载两次:
使用paths
轻松修复此问题以配置外部文件夹路径(如require_js docs中所述):
requirejs.config({
paths: {ext: '../ext'}
});
设置paths
后,依赖关系仅使用fileA.js
和fileB.js
加载一次,使用相同的依赖路径,如下所示:
//fileA:
define(['ext/publisher'], function(){});
和
//fileB:
define(['ext/publisher'], function(){});