最近在看《node开发实战详解》时有写疑问,所以自己就整理了一些资料。下面是node4.*的官方api文档(http://nodejs.cn/doc/node_4/modules.html#modules_module_exports),我有点看不懂,就拉出node.10*的官方api(https://nodejs.org/dist/v0.10.9/docs/api/modules.html#modules_module_exports)。

module.exports与exports的介绍

module.exports与exports都是将函数或者是方法暴露出去,require的时候进行调用,但是2者是有区别的。以下是代码:

//ex.js

exports='danhuangmode';

//mex.js

module.exports='danhuangmode';

//call_ex_mex.js

var ex=require('./ex');
  var mex=require('./mex');

console.log(ex);
  console.log('\n');
  console.log(mex);

执行结果:

引用exports提供方法,输出是为一个对象,引用module.exports提供方法,输出为字符串。

exports内部提供接口,在外部引用时之间的关系如何?

exports内部处理暴露方法,是如何处理的,看如下代码:

var string='this is in exports.js';

 function ex_fn () {
console.log('this in funtion ex_fn');
} var exobj={
str1:"str1 exobj",
exobjfn: function () {
console.log("in function");
}
}; exports.string=string;
exports.ex_fn=ex_fn;
exports.exobj=exobj;
exports=exobj;

调用代码:

var ex=require('./ex');

console.log(ex.string);
console.log(ex.ex_fn);
console.log(ex.exobj);
console.log(ex);

结果显示:

exports提供的所有接口,直接调用导出实例化的接口对象,会显示接口对象中所有提供的类型、函数、对象以及对象中的方法和对象。

module.exports对外提供接口如何处理?

//mex.js

var ex_fn= function () {
console.log('this in funtion ex_fn');
} module.exports=ex_fn;

调用代码mex.js:

//引用mex.js

var ex=require('./mex');
ex();
console.log(ex);

 

执行结果为:

直接将函数作为返回。

再看下面一个例子:

var person={
name :"person's name",
age :20,
getAge: function () {
return this.age;
}
} module.exports = person;

调用的代码:

var person=require('./modulex');

console.log(person.name);
console.log(person.age);
console.log(person.getAge());
console.log(person);

显示的结果为:

返回为一个json对象,可以直接调用内部的函数、属性。

module.exports 与exports是什么关系?

module.exports = 'personname';

exports.name=function  () {
console.log('this is person name');
}

调用 的脚本:

var person=require('./person');

console.log(person);
console.log(person.name);

执行结果:

personname
undefined

结果:

其实真正的接口是module.exports,exports是一个辅助工具。最终返回到是module.exports,而不是exports。

当module.exports没有任何属性和方法,exports将收集的所有信息都传递给module.exports,如果module.exports已经具有了属性和方法,exports所搜集的信息将会被忽略。

Node中Exports与module.export的使用与区别的更多相关文章

  1. node中exports和module.exports的关系及使用

    在node中,需要记住,在使用exports和module.exports的时候,实际输出的是module.exports. exports指向module.exports,是module.expor ...

  2. Node.js exports与module.exports的关系

    今天搜索module.exports时看到CNode社区上发的Hack Sparrow一篇相关文章的链接 Node.js Module – exports vs module.exports 一篇5年 ...

  3. Node.js中exports,module.exports以及require方法

    在Node.js中,使用module.exports.f = ...与使用exports.f = ...是一样的,此时exports就是module.exports的一种简写方式.但是,需要注意的是, ...

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

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

  5. node.js模块中exports和module.exports的区别

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

  6. Node.js 中 exports 和 module.exports 的区别

    每一个模块中都有一个 module 对象, module 对象中有一个 exports 对象 我们可以把需要导出的成员都放到 module.exports 这个接口对象中,也就是 module.exp ...

  7. nodejs模块中exports和module.exports的区别

    通过Node.js的官方API可以看到Node.js本身提供了很多核心模块 http://nodejs.org/api/ ,这些核心模块被编译成二进制文件,可以require('模块名')去获取:核心 ...

  8. nodejs中exports与module.exports的区别详细介绍

    如果模块是一个特定的类型就用Module.exports.如果模块是一个典型的"实例化对象"就用exports. exports.name = function() { conso ...

  9. vue中的import、export、requre的区别

    在es6之前js一直没有自己的模块语法,为了解决这种尴尬就有了require.js的出现.在es6发布之后js又引入了import的概念使得不清楚两者之间的区别的同学在实际使用过程中造成了自己的误解, ...

随机推荐

  1. Java位运算总结:位运算用途广泛《转》

    前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...

  2. mac下设置命令别名

    项目使用了gerrit,每次push代码都需要执行 git push origin HEAD:refs/for/master 为了简便,使用了alias命令来控制台下使用下面的命令简化了提交. ali ...

  3. HttpClient 教程

    前言 超文本传输协议(HTTP)也许是当今互联网上使用的最重要的协议了.Web服务,有网络功能的设备和网络计算的发展,都持续扩展了HTTP协议的角色,超越了用户使用的Web浏览器范畴,同时,也增加了需 ...

  4. android 判断程序是首次(第一次)进入

    很多时候,我们需要判断用户是不是第一次进入程序,以决定是不是给用户一些操作提示. 这种功能的实现,说到底还是将数据(一个标志位)存储起来,下次进入程序的时候读取数据进行判断. 我这里只给出一种较简单的 ...

  5. Android开源项目发现--- 效率开发工具篇(持续更新)

    1.Json2Java 根据JSon数据自动生成对应的Java实体类,还支持Parcel.Gson Annotations对应代码自动生成.期待后续的提取父类以及多url构建整个工程的功能 项目地址: ...

  6. Android+struts2+JSON方式的手机开发(Login)

    在手机的后台服务无论是调用WebService还是Http请求,多数都是采用Android的HttpClient实现相关的调用实现.本文实现Android+Struts2+JSON方式实现为手机前台提 ...

  7. Linux给用户增加sudo权限

    有时候我们在Linux下执行sudo的时候,出现 xxx is not int the sudoers file 告诉我们当前用户不是sudoer,所以我们要把当前用户添加进去,步骤如下: 1.进入超 ...

  8. 把mysql 中的字符gb2312 改为gbk的方法

    第一步:查找mysql的字符: mysql> show variables like '%char%';+--------------------------+----------------- ...

  9. cobbler_web安装

  10. JavaScript 的 Date 最详细解读

    基础的 Date() 就不说了~ :  ) 如何获得某个月的天数? 不知道大家遇到过这个问题吗?我想如果你们写过日期组件一定有这个问题,我当时的解决方案是这样的: 以下的三个方法,month 参数我都 ...