当有两个文件导入同一个模块时,它似乎共享相同的资源,如下所示:
main.js:
require(['cmdA', 'cmdB'], function(cmdA, cmdB){
})cmdA.js:
define(function(require, exports){
console.log('require: cmdA');
var body = require('body');
});cmdB.js:
define(function(require, exports){
console.log('require: cmdB');
var body = require('body');
});结果:
require body
require: cmdA
require: cmdB 那么,为什么不:
require body
require: cmdA
require body
require: cmdB我认为body.js需要两次,所以控制台输出了两次body。为什么?
发布于 2014-03-14 16:47:44
默认情况下,RequireJS将模块视为单例。一旦RequireJS完成了它的名称解析,并发现您想要模块X,那么如果您需要它一次、两次、三百万次,您将始终得到相同的模块对象。第一次需要该模块时,将创建该模块,然后下次再次需要该模块时,您将得到与第一次返回的模块相同的模块。您给define的回调只调用一次,而且只调用一次。
如果您使用requirejs.undef,您可以欺骗RequireJS为您提供一个模块的多个副本,但这不是基本用法。
https://stackoverflow.com/questions/22410897
复制相似问题