node.js中exports与module.exports

简介:

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

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

    在另一个文件中你这样引用

1
2
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如下:

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

    再次引用执行rocker.js

1
2
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的属性。


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

1
2
3
4
5
6
7
module.exports =  function (name, age) {
     this .name = name;
     this .age = age;
     this .about =  function () {
         console.log( this .name + ' is ' this .age + ' years old' );
     };
};

    可以这样应用它:

1
2
var  Rocker = require( './rocker.js' ); var  r =  new  Rocker( 'Ozzy' , 62);
r.about();  // Ozzy is 62 years old


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

1
module.exports = [ 'Lemmy Kilmister' 'Ozzy Osbourne' 'Ronnie James Dio' 'Steven Tyler' 'Mick Jagger' ];

    可以这样应用它:

1
2
var  rocker = require( './rocker.js' );
console.log( 'Rockin in heaven: '  + rocker[2]);  //Rockin in heaven: Ronnie James Dio


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


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

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

    同样,exports是这样的

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


    请注意,这两种结果并不相同。前面已经提到module.exports是真正的接口,exports只不过是它的辅助工具。推荐使用exports导出,除非你打算从原来的“实例化对象”改变成一个类型。










本文转自 iampomelo 51CTO博客,原文链接:http://blog.51cto.com/iampomelo/1674047,如需转载请自行联系原作者
目录
相关文章
(node)Warning: Accessing non-existent property ‘xxx‘ of module exports inside circular depen
(node)Warning: Accessing non-existent property ‘xxx‘ of module exports inside circular depen
|
缓存 JavaScript 前端开发
|
12天前
|
JavaScript
nodejs安装之npm ERR! code CERT_HAS_EXPIREDnpm ERR! errno CERT_HAS_EXPIRED reason: certificate has expired-证书错误通用问题解决方案-优雅草央千澈
nodejs安装之npm ERR! code CERT_HAS_EXPIREDnpm ERR! errno CERT_HAS_EXPIRED reason: certificate has expired-证书错误通用问题解决方案-优雅草央千澈
|
2月前
|
Web App开发 JavaScript 前端开发
2024年5月node.js安装(winmac系统)保姆级教程
本篇博客为2024年5月版Node.js安装教程,适用于Windows和Mac系统。作者是一名熟悉JavaScript与Vue的大一学生,分享了Node.js的基本介绍、下载链接及简单安装步骤。安装完成后,通过终端命令`node -v`验证版本即可确认安装成功。欢迎关注作者,获取更多技术文章。
39 2
2024年5月node.js安装(winmac系统)保姆级教程
|
2月前
|
存储 JavaScript 搜索推荐
Node框架的安装和配置方法
安装 Node 框架是进行 Node 开发的第一步,通过正确的安装和配置,可以为后续的开发工作提供良好的基础。在安装过程中,需要仔细阅读相关文档和提示,遇到问题及时解决,以确保安装顺利完成。
143 2
|
4月前
|
JavaScript
NodeJs的安装
文章介绍了Node.js的安装步骤和如何创建第一个Node.js应用。包括从官网下载安装包、安装过程、验证安装是否成功,以及使用Node.js监听端口构建简单服务器的示例代码。
NodeJs的安装
|
3月前
|
JavaScript 开发工具 git
已安装nodejs但是安装hexo报错
已安装nodejs但是安装hexo报错
60 2
|
3月前
|
JavaScript 算法 内存技术
如何降低node.js版本(nvm下载安装与使用)
如何降低node.js版本(nvm下载安装与使用)
|
4月前
|
存储 JavaScript 前端开发
Node 版本控制工具 NVM 的安装和使用(Windows)
本文介绍了NVM(Node Version Manager)的Windows版本——NVM for Windows的安装和使用方法,包括如何安装Node.js的特定版本、列出已安装版本、切换使用不同版本的Node.js,以及其他常用命令,以实现在Windows系统上对Node.js版本的便捷管理。
Node 版本控制工具 NVM 的安装和使用(Windows)
|
4月前
|
SQL JavaScript 数据库
sqlite在Windows环境下安装、使用、node.js连接
sqlite在Windows环境下安装、使用、node.js连接