查看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. Daily Scrum 12.14

    今日完成任务: 优化了问题页面显示问题的算法:两名开发人员有CCF考试,今天没有完成任务,任务顺延到明天. 明日任务: 黎柱金 解决资源显示全部为同一个PDF的BUG 晏旭瑞 资源搜索问题 孙思权 做 ...

  2. 一个CURL

    CURL curl是利用url语法规则来传输文件,数据的工具,主要实现和服务器中网页,资源传输的工具.这里有一个关于感冒还没好的段子. 1.去phpini开启curl扩展,重启阿帕奇或者配置环境变量或 ...

  3. 大漠绑定测试工具-VB6

    获取更新开始|版本:3.1652版 2016年12月27日|更新内容:1.取消自动更新错误的提示.\n\n友情提示:如网盘失效,请加QQ群(568073679)下载最新版|下载地址:http://ww ...

  4. IOS 数据库

    系统自带可以储存字段的字典: NSUserDefaults *user = [[NSUserDefaults alloc] init]; 存 : [user setObject:@"YES& ...

  5. 关于“float”的一次探索--遇到了一个span元素可以设置宽高引发的思考

    起初,这个问题和float还有设置宽高之间是没有任何关联的,一开始这是一个关于height和line-height的问题,目的是为了探究一下这两者之间的关系,但是在学习的过程中,我翻之前写的代码,发现 ...

  6. SQL 使用 AND 与 OR

    1.介绍:关于AND与OR的使用是比较基础的,但是在项目中如果不注意使用的话会使查出来的数据有错误. 2.主要问题: 在未加任何AND与OR的选择是独立的,与逻辑运算一样.即: SELECT * FR ...

  7. Log

    Public Shared Sub WriteLog(ByVal FormID As String, ByVal ex1 As Exception) 'log信息 Dim loginfo As Str ...

  8. pl/sql中文乱码问题解决

    最近用pl/sql连我们公司的数据库,发现表里的中文数据都是“???”,上网查了一下,发现是数据库的编码格式和pl/sql的编码格式不统一造成的. 解决方法非常简单,只要创建一个系统环境变量:NLS_ ...

  9. sqlserver中的表值函数和标量值函数

    顾名思义:表值函数返回的是表,而标量值函数可以返回基类型 一.表值函数 用户定义表值函数返回 table 数据类型.对于内联表值函数,没有函数主体:表是单个 SELECT 语句的结果集. 以下示例创建 ...

  10. C语言小练习三

    题目要求: 定义一个二维数组保存 10个学生的5门课成绩,分别用函数实现:(1)input():输入每个学生的成绩:(2)output():输出每个学生的成绩:(3)aver_stu():计算并输出每 ...