查看dojo源码过程中,发现这三个模块名并不以dojo、dijit、dojox开头,在dojo加载器中属于特殊模块名。

  

  

  require

  这是一个上下文智能的加载器。

  我们通过dojoConfig配置了一个package:myApp,现在对myApp目录下的文件可以使用如下方式请求:

// this is "myApp/topLevelHandlers"
define(["dojo"], function(dojo){
dojo.connect(dojo.byId("debugButton"), "click", function(){
require(["myApp/perspectives/debug"], function(perspective){
perspective.open();
});
});
});

  通过全局的require函数请求一个myApp包下的文件仍然用“包名+文件路径”的形式。如果我们希望像define那样使用相对路径加载模块:reqiure(['./perspectives/debug'], function(){debug});而require是无法找到“./perspectives/debug”这个module的。这时就轮到这个上下文智能的require模块上场了。

// this is "myApp/topLevelHandlers"
define(["dojo", "require"], function(dojo, require){
dojo.connect(dojo.byId("debugButton"), "click", function(){
require(["./perspectives/debug"], function(perspective){
perspective.open();
});
});
});

  通过引用reqire模块代替全局require函数,我们可以使用相对路径来加载模块,这就是上下文智能。

exports

  exports这个模块的作用与node.js中exports的作用类似,用于导出当前模块的方法或者变量。在node中它是唯一导出的出口,但是在dojo中我们可以直接在模块中返回一个对象字面量。

define([], function(){
return {
someProperty:"hello",
someOtherProperty:"world"
};
}); define(["exports"], function(exports){
exports.someProperty = "hello";
exports.someOtherProperty = "world";
});

  一般情况下,这两种写法都相同,但是在发生循环依赖情况下,使用exports dojo的加载器可以判断出模块是否加载完毕,而不是出于死锁状态。

module

  

  module引用module模块会返回一个对象,该对象有三个参数:
  • id:一个唯一的模块id,在程序中唯一标识一个模块;require([module.id], function(m){}); m代表了该id所对应的模块;这个属性在一些需要需要根据模块id与一个计数器拼接起来的功能时常用到,比如dojo/request/script中callback参数

  • uri:代表该模块的绝对url路径
  • exports:该属性同上文exports模块作用类似。稍有区别就是我们可以通过该属性让exports指向一个新的对象(通常是一个函数)。类似node中改变模块中exports引用。
define(“myModule”,["module"], function(module){
module.exports = dojo.declare(/*...*/);
});

  原来的exports属性是一个对象,现在是一个类。下次引用该模块时就可以用来实例化对象。

define(["myModule"], function(MyModule){
var m = new MyModule();
});

  

  这三个特殊的module是dojo用来兼容其他CommonJs类库时使用。比如将dojo集成进node,这是另一篇文章要将的。

require、module、exports dojo中的三个特殊模块标识的更多相关文章

  1. 探讨ES6的import export default 和CommonJS的require module.exports

    今天来扒一扒在node和ES6中的module,主要是为了区分node和ES6中的不同意义,避免概念上的混淆,同时也分享一下,自己在这个坑里获得的心得. 在ES6之前 模块的概念是在ES6发布之前就出 ...

  2. Node.js中exports与module.exports的区别

    原文:http://www.hacksparrow.com/node-js-exports-vs-module-exports.html 你肯定对Node.js模块中用来创建函数的exports对象很 ...

  3. Node.js中的exports与module.exports的区分

    1. module应该是require方法中,上下文中的对象 2. exports对象应该是上下文中引用module.exports的新对象 3. exports.a = xxx 会将修改更新到mod ...

  4. module.exports,exports,export和export default,import与require区别与联系【原创】

    还在为module.exports.exports.export和export default,import和require区别与联系发愁吗,这一篇基本就够了! 一.首先搞清楚一个基本问题: modu ...

  5. module.exports小程序模块化,require

    小程序模块化 可以将一些公共的代码抽离成为一个单独的 js 文件,作为一个模块.模块只有通过 module.exports 或者 exports 才能对外暴露接口. tips:exports 是 mo ...

  6. nodejs 中 module.exports 和 exports 的区别

    1. module应该是require方法中,上下文中的对象 2. exports对象应该是上下文中引用module.exports的新对象 3. exports.a = xxx 会将修改更新到mod ...

  7. module.exports,exports,export和export default,import与require区别与联系

    还在为module.exports.exports.export和export default,import和require区别与联系发愁吗,这一篇基本就够了! 一.首先搞清楚一个基本问题: modu ...

  8. export,export default,module.exports,import,require之间的区别和关联

    module.exports Node 应用由模块组成,采用 CommonJS 模块规范.根据这个规范,每个文件就是一个模块,有自己的作用域.在这些文件里面定义的变量.函数.类,都是私有的,对外不可见 ...

  9. CommonJS 规范中的 module、module.exports 区别

    CommonJS 规范中的 module.module.exports 区别 CommonJS规范规定,每个模块内部,module变量代表当前模块.这个变量是一个对象,它的exports属性(即mod ...

随机推荐

  1. jquery中的append和appendTo用法

    append(content):向每个匹配的元素内部追加内容.这个操作与对指定的元素执行appendChild方法,将它们添加到文档中的情况类似. JavaScript代码 <script ty ...

  2. 主机使用代理上网,虚拟机Linux如何连外网

    VMware虚拟机的三种联网方法及原理 一.Brigde--桥接  :默认使用VMnet0 1.原理: Bridge  桥"就是一个主机,这个机器拥有两块网卡,分别处于两个局域网中,同时在& ...

  3. dhtmlx相关

    主页:http://dhtmlx.com/ 文档地址:http://docs.dhtmlx.com/ 后台:https://dhtmlx.com/docs/products/dhtmlxConnect ...

  4. UI线程和work线程

    UI线程处理消息,比如重绘,响应键盘鼠标等等跟消息有关的处理. 而工作线程一般是你自己写的用来处理数据的,比如操作数据库等等.(work线程)    

  5. S2SH简介

    struts2简介 Struts2是由WebWork基础上发展起来的,与struts1比较,选用struts2的理由是:①Struts1要求Action类继承一个抽象基类,而Struts 2 Acti ...

  6. 关于Scrum团队的理解

     <阅读完<构建之法>第6~7章>之读后感 阅读完<构建之法>第6~7章之后,不仅感觉获益匪浅,也甚感团队合作.分配.工作的不易与一个团队运营一个项目并推广的艰辛与 ...

  7. php怎么解决超链接中的中文参数转码问题?

    如题,我需要通过前端的网页传递一个中文参数(如:电脑)给后端的PHP文件,传递方式是通过超链接 "index.php/search/keyword/电脑" ,很明显的中文在传递过程 ...

  8. vs2010的“应用程序向导”新建MFC程序报错“当前页面的脚本发送错误”

    原创文章,欢迎阅读,禁止转载. 问题现象不知道从什么时候开始,我的vs2010不能新建MFC程序了,报错如图:... 解决方法根据提示排查,发现是应用程序向导的相关html被损坏了.从同事电脑上把   ...

  9. 找一个四位数,要求该四位数的四倍刚好是该四位数的反序。 即b1b2b3b4 * 4 = b4b3b2b1

    找一个四位数,要求该四位数的四倍刚好是该四位数的反序. 即b1b2b3b4 * 4 = b4b3b2b1 解: 第一步,确认最末位 假设 b1b2b3b4 + b4b3b2b1 = [x0]x1x2x ...

  10. <Oracle Database>数据库启动与关闭

    启动和关闭Oracle数据库 要启动和关闭数据库,必须要以具有Oracle 管理员权限的用户登陆,通常也就是以具有SYSDBA权限的用户登陆.一般我们常用INTERNAL用户来启动和关闭数据库(INT ...