require、module、exports dojo中的三个特殊模块标识
查看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
- 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中的三个特殊模块标识的更多相关文章
- 探讨ES6的import export default 和CommonJS的require module.exports
今天来扒一扒在node和ES6中的module,主要是为了区分node和ES6中的不同意义,避免概念上的混淆,同时也分享一下,自己在这个坑里获得的心得. 在ES6之前 模块的概念是在ES6发布之前就出 ...
- Node.js中exports与module.exports的区别
原文:http://www.hacksparrow.com/node-js-exports-vs-module-exports.html 你肯定对Node.js模块中用来创建函数的exports对象很 ...
- Node.js中的exports与module.exports的区分
1. module应该是require方法中,上下文中的对象 2. exports对象应该是上下文中引用module.exports的新对象 3. exports.a = xxx 会将修改更新到mod ...
- module.exports,exports,export和export default,import与require区别与联系【原创】
还在为module.exports.exports.export和export default,import和require区别与联系发愁吗,这一篇基本就够了! 一.首先搞清楚一个基本问题: modu ...
- module.exports小程序模块化,require
小程序模块化 可以将一些公共的代码抽离成为一个单独的 js 文件,作为一个模块.模块只有通过 module.exports 或者 exports 才能对外暴露接口. tips:exports 是 mo ...
- nodejs 中 module.exports 和 exports 的区别
1. module应该是require方法中,上下文中的对象 2. exports对象应该是上下文中引用module.exports的新对象 3. exports.a = xxx 会将修改更新到mod ...
- module.exports,exports,export和export default,import与require区别与联系
还在为module.exports.exports.export和export default,import和require区别与联系发愁吗,这一篇基本就够了! 一.首先搞清楚一个基本问题: modu ...
- export,export default,module.exports,import,require之间的区别和关联
module.exports Node 应用由模块组成,采用 CommonJS 模块规范.根据这个规范,每个文件就是一个模块,有自己的作用域.在这些文件里面定义的变量.函数.类,都是私有的,对外不可见 ...
- CommonJS 规范中的 module、module.exports 区别
CommonJS 规范中的 module.module.exports 区别 CommonJS规范规定,每个模块内部,module变量代表当前模块.这个变量是一个对象,它的exports属性(即mod ...
随机推荐
- python学习-day14-前端之html、css
一.Html 1.本质:一个规则,浏览器能任务的规则 2.开发者: 学习Html规则 开发后台程序: - 写Html文件(充当模板的作用) ***** ...
- linux开机启动程序
一./etc/rc.local这是一个最简单的方法,编辑“/etc/rc.local”,把启动程序的shell命令输入进去即可(要输入命令的全路径),类似于windows下的“启动”. 使用命令 vi ...
- linux 查看php-fpm 进程数
netstat -napo |grep "php-fpm" | wc -l
- Windows 结构化异常
结构化异常不能用于需要调用对象析构函数的函数中 __try{ } __except(){ } __try{ } __finally{ }
- 面向对象的OOA、OOD、OOP
OOA Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA与结构化分析有较大的区别.OOA所强调的 ...
- Server.mappath用法
1.Server.MapPath ("/") 应用程序根目录所在的位置 如 C:\qq\qqroot\ 2.Server.MapPath ("./") 表示所在 ...
- lua 位运算
bit = {data32={}} , do bit.data32[i] = ^(-i) end function bit:d2b( arg ) local num = tonumber( arg ) ...
- 在centos上配置IP
当我们安装好系统后,最先做的应该就是配置IP了,因为无论是要下载工具软件.还是远程链接,网络必不可少,所以我们要先来配置IP! 一.查看IP 如何在centos上查看IP呢,使用 ifconfig 命 ...
- 今天我们要说的画一个三角形,恩,画一个三角形,第一种呢是利用我们的html标签结合css来实现;而第二种方法就就是我们的html5新增的一个标签canves,这个canves就是网页画幕,那么顾名思义就是在网页里建造一个画板,用来画画,好,那接下来就和我一起去看看吧!
第一种方法:利用我们的html标签结合css来实现 span{ width:0px; height:0px; border-width:7px; border-style:solid; border- ...
- eclipse js 引用跳转
引用 http://stackoverflow.com/questions/24505993/the-resource-is-not-on-the-build-path-of-a-javascript ...