首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么RequireJS不加载一次以上的模块我需要多次?

为什么RequireJS不加载一次以上的模块我需要多次?
EN

Stack Overflow用户
提问于 2014-03-14 16:38:47
回答 1查看 3.2K关注 0票数 6

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

main.js:

代码语言:javascript
复制
require(['cmdA', 'cmdB'], function(cmdA, cmdB){

})

cmdA.js:

代码语言:javascript
复制
define(function(require, exports){
    console.log('require: cmdA');
    var body = require('body');
});

cmdB.js:

代码语言:javascript
复制
define(function(require, exports){
    console.log('require: cmdB');
    var body = require('body');
});

结果:

代码语言:javascript
复制
require body 
require: cmdA 
require: cmdB 

那么,为什么不:

代码语言:javascript
复制
require body
require: cmdA
require body
require: cmdB

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-14 16:47:44

默认情况下,RequireJS将模块视为单例。一旦RequireJS完成了它的名称解析,并发现您想要模块X,那么如果您需要它一次、两次、三百万次,您将始终得到相同的模块对象。第一次需要该模块时,将创建该模块,然后下次再次需要该模块时,您将得到与第一次返回的模块相同的模块。您给define的回调只调用一次,而且只调用一次。

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22410897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档