为什么RequireJS不会多次加载我需要多次的模块?

gum*_*mpg 5 javascript require requirejs

当有两个文件导入相同的模块时,它似乎共享相同的资源,如下所示:

main.js:

require(['cmdA', 'cmdB'], function(cmdA, cmdB){

})
Run Code Online (Sandbox Code Playgroud)

cmdA.js:

define(function(require, exports){
    console.log('require: cmdA');
    var body = require('body');
});
Run Code Online (Sandbox Code Playgroud)

cmdB.js:

define(function(require, exports){
    console.log('require: cmdB');
    var body = require('body');
});
Run Code Online (Sandbox Code Playgroud)

结果:

require body 
require: cmdA 
require: cmdB 
Run Code Online (Sandbox Code Playgroud)

那么为什么不呢:

require body
require: cmdA
require body
require: cmdB
Run Code Online (Sandbox Code Playgroud)

我认为body.js需要两次,所以控制台输出两次.为什么?

Lou*_*uis 8

默认情况下,RequireJS将模块视为单例.一旦RequireJS执行了它的名称解析并发现你想要模块,X那么如果你需要它一次,两次,三百万次,你将总是获得相同的模块对象.第一次需要该模块时,会创建该模块,然后在下次再次需要该模块时,您将获得与第一次返回的模块相同的模块.你给的回调define只调用一次,而且只调用一次.

如果您使用requirejs.undef,您可以欺骗RequireJS为您提供模块的多个副本,但这不是基本用法.