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


Posted in NodeJs onJanuary 14, 2013

你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块。例如:(假设这是rocker.js文件)

exports.name = function() { 
console.log('My name is Lemmy Kilmister'); 
};

在另一个文件中你这样引用
var rocker = require('./rocker.js'); 
rocker.name(); // 'My name is Lemmy Kilmister'

那到底Module.exports是什么呢?它是否合法呢?
其实,Module.exports才是真正的接口,exports只不过是它的一个辅助工具。 最终返回给调用的是Module.exports而不是exports。

所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是Module.exports本身不具备任何属性和方法。如果,Module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。

修改rocker.js如下:

module.exports = 'ROCK IT!'; 
exports.name = function() { 
console.log('My name is Lemmy Kilmister'); 
};

再次引用执行rocker.js
var rocker = require('./rocker.js'); 
rocker.name(); // TypeError: Object ROCK IT! has no method 'name'

发现报错:对象“ROCK IT!”没有name方法
rocker模块忽略了exports收集的name方法,返回了一个字符串“ROCK IT!”。由此可知,你的模块并不一定非得返回“实例化对象”。你的模块可以是任何合法的javascript对象--boolean, number, date, JSON, string, function, array等等。

你的模块可以是任何你设置给它的东西。如果你没有显式的给Module.exports设置任何属性和方法,那么你的模块就是exports设置给Module.exports的属性。

下面例子中,你的模块是一个类:

module.exports = function(name, age) { 
this.name = name; 
this.age = age; 
this.about = function() { 
console.log(this.name +' is '+ this.age +' years old'); 
}; 
};

可以这样应用它:
var Rocker = require('./rocker.js'); 
var r = new Rocker('Ozzy', 62); 
r.about(); // Ozzy is 62 years old

下面例子中,你的模块是一个数组:
module.exports = ['Lemmy Kilmister', 'Ozzy Osbourne', 'Ronnie James Dio', 'Steven Tyler', 'Mick Jagger'];

可以这样应用它:
var rocker = require('./rocker.js'); 
console.log('Rockin in heaven: ' + rocker[2]); //Rockin in heaven: Ronnie James Dio

现在你明白了,如果你想你的模块是一个特定的类型就用Module.exports。如果你想的模块是一个典型的“实例化对象”就用exports。

给Module.exports添加属性类似于给exports添加属性。例如:

module.exports.name = function() { 
console.log('My name is Lemmy Kilmister'); 
};

同样,exports是这样的
exports.name = function() { 
console.log('My name is Lemmy Kilmister'); 
};

请注意,这两种结果并不想同。前面已经提到module.exports是真正的接口,exports只不过是它的辅助工具。推荐使用exports导出,除非你打算从原来的“实例化对象”改变成一个类型。
NodeJs 相关文章推荐
NodeJS 模块开发及发布详解分享
Mar 07 NodeJs
基于 Docker 开发 NodeJS 应用
Jul 30 NodeJs
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
Sep 26 NodeJs
nodejs下打包模块archiver详解
Dec 03 NodeJs
详解nodejs 文本操作模块-fs模块(一)
Dec 22 NodeJs
详解nodejs操作mongodb数据库封装DB类
Apr 10 NodeJs
Windows下快速搭建NodeJS本地服务器的步骤
Aug 09 NodeJs
nodejs调取微信收货地址的方法
Dec 20 NodeJs
nodeJS模块简单用法示例
Apr 21 NodeJs
nodejs用gulp管理前端文件方法
Jun 24 NodeJs
NodeJs项目中关闭ESLint的方法
Aug 09 NodeJs
nodejs require js文件入口,在package.json中指定默认入口main方法
Oct 10 NodeJs
nodejs的require模块(文件模块/核心模块)及路径介绍
Jan 14 #NodeJs
windows系统下简单nodejs安装及环境配置
Jan 08 #NodeJs
NodeJs中的非阻塞方法介绍
Jun 05 #NodeJs
nodejs win7下安装方法
May 24 #NodeJs
NodeJS的模块写法入门(实例代码)
Mar 07 #NodeJs
nodejs入门详解(多篇文章结合)
Mar 07 #NodeJs
NodeJS 模块开发及发布详解分享
Mar 07 #NodeJs
You might like
用来解析.htgroup文件的PHP类
2012/09/05 PHP
php中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
关于跨站脚本攻击问题
2011/12/22 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
js函数内变量的作用域分析
2015/01/12 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
vue.js项目中实用的小技巧汇总
2017/11/29 Javascript
webpack学习教程之前端性能优化总结
2017/12/05 Javascript
微信小程序模版渲染详解
2018/01/26 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python黑魔法之参数传递
2016/02/12 Python
Python DataFrame设置/更改列表字段/元素类型的方法
2018/06/09 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
python实现AES加密与解密
2019/03/28 Python
Python实现图片识别加翻译功能
2019/12/26 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
Sunglasses Shop德国站:欧洲排名第一的太阳镜网站
2017/08/01 全球购物
关于VPN
2012/06/10 面试题
初一家长会邀请函
2014/01/31 职场文书
关爱留守儿童倡议书
2014/04/15 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
单位员工收入证明样本
2014/10/09 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
4S店销售内勤岗位职责
2015/04/13 职场文书
2015年副班长工作总结
2015/05/15 职场文书