Node.js Module – exports 和module.exports之间的联系与区别
2012-06-19 12:00
1016 查看
来自本人论坛:www.tnodejs.com tnodejs.com
最近大家都说两者是一样的,其实不然,本文来自
http://www.hacksparrow.com/node-js-exports-vs-module-exports.html翻译
相信大家都很熟悉exports的用法了,你可以创建一个function在你的模块中如下:
我们可以通过如下方法执行访问:
在开源的node.js代码中可以看出,module.exports才是真正的模块export,而exports仅仅是module.exports的一个帮手。你的所有模块export的,最终都是通过module.exports返回出去的。Exports的作用主要是将所有的属性和方法整理、连接给module.exports,当module.exports还未执行。如果module.exports执行以后,所有的exports方法都将失效。
下面的例子就是说明上面一点
创建一个rocker.js:
你可能意识到,你的模块并不总是有“模块实例”。你的模块可能是任何的类型的JavaScript对象boolean,
number, date, JSON, string, function, array等等。你可以通过module.exports任何的对象。
If you don't set module.exports to anythingexplicitly, the properties of exports and attached to it and returned.
In this case, your module is a class:
this case, your module is an array:
you get the point now - if you want yourmodule to be of a specific object type, use module.exports; if you want yourmodule to be a typical module instance, use exports.
The result of attaching properties tomodule.exports is akin to attaching properties to exports. For example this:
the same thing as:
Having said that, exports is the recommended object unless you areplanning to change the object type of your module from the traditional 'module instance'to something else.
I hope this post helped you understand thedifference between exports and module.exports, and learn a bit more about howmodules work in Node.js. Any questions, ping me in
the comments.
加上官网的介绍
The exports object is created by the Modulesystem. Sometimes this is not acceptable, many want their module to be aninstance of some class. To do this assign the desired export object to module.exports. For example suppose we were making amodule called a.js
Then in another file we could do
Note that assignment to [font='Lucida Console']module.exports must be done immediately. It cannotbe done in any callbacks. This does not work:
x.js:
y.js:
最近大家都说两者是一样的,其实不然,本文来自
http://www.hacksparrow.com/node-js-exports-vs-module-exports.html翻译
相信大家都很熟悉exports的用法了,你可以创建一个function在你的模块中如下:
exports.name = function() { console.log('My name is Lemmy Kilmister'); };
我们可以通过如下方法执行访问:
var rocker = require('./rocker.js'); rocker.name(); // 'My name is Lemmy Kilmister'那么module.exports存在的意义是什么?他是否在编码中也是正确合法的?
在开源的node.js代码中可以看出,module.exports才是真正的模块export,而exports仅仅是module.exports的一个帮手。你的所有模块export的,最终都是通过module.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'); };
var rocker = require('./rocker.js'); rocker.name(); // TypeError: Object ROCK IT! has no method 'name'可以看到执行结果中无法获取name这个function。rocker.js中最开始就执行了module.exports,根据之前我们介绍的,在module.exports执行后他将拒绝所有的exports模块,因此我们的exports.name将会失效。从而我们无法在require模块后获取该方法。
你可能意识到,你的模块并不总是有“模块实例”。你的模块可能是任何的类型的JavaScript对象boolean,
number, date, JSON, string, function, array等等。你可以通过module.exports任何的对象。
If you don't set module.exports to anythingexplicitly, the properties of exports and attached to it and returned.
In this case, your module is a class:
module.exports = function(name, age) { this.name = name; this.age = age; this.about = function() { console.log(this.name +' is '+ this.age +' years old'); }; };and you'd use it this way:
var Rocker = require('./rocker.js'); var r = new Rocker('Ozzy', 62); r.about(); // Ozzy is 62 years oldIn
this case, your module is an array:
module.exports = ['Lemmy Kilmister', 'Ozzy Osbourne', 'Ronnie James Dio', 'Steven Tyler', 'Mick Jagger'];and you may use it this way:
var rocker = require('./rocker.js'); console.log('Rockin in heaven: ' + rocker[2]); //Rockin in heaven: Ronnie James DioSo
you get the point now - if you want yourmodule to be of a specific object type, use module.exports; if you want yourmodule to be a typical module instance, use exports.
The result of attaching properties tomodule.exports is akin to attaching properties to exports. For example this:
module.exports.name = function() { console.log('My name is Lemmy Kilmister'); };does
the same thing as:
exports.name = function() { console.log('My name is Lemmy Kilmister'); };But note that, they are not the same thing.As I said earlier module.exports is the real deal, exports is just its littlehelper.
Having said that, exports is the recommended object unless you areplanning to change the object type of your module from the traditional 'module instance'to something else.
I hope this post helped you understand thedifference between exports and module.exports, and learn a bit more about howmodules work in Node.js. Any questions, ping me in
the comments.
加上官网的介绍
The exports object is created by the Modulesystem. Sometimes this is not acceptable, many want their module to be aninstance of some class. To do this assign the desired export object to module.exports. For example suppose we were making amodule called a.js
var EventEmitter = require('events').EventEmitter; module.exports = new EventEmitter(); // Do some work, and after some time emit // the 'ready' event from the module itself. setTimeout(function() { module.exports.emit('ready'); }, 1000);
Then in another file we could do
var a = require('./a'); a.on('ready', function() { console.log('module a is ready'); });
Note that assignment to [font='Lucida Console']module.exports must be done immediately. It cannotbe done in any callbacks. This does not work:
x.js:
setTimeout(function() { module.exports = { a: "hello" }; }, 0);
y.js:
var x = require('./x'); console.log(x.a);
相关文章推荐
- Node.js中exports和module.exports的联系和区别
- Node.js中exports与module.exports的区别
- nodejs exports和module.exports区别
- Node.js中exports与module.exports的区别
- Node.js中的module.exports和exports的区别
- node.js中module.exports与exports的区别
- Node.js中exports与module.exports的区别
- Node.js中exports与module.exports的区别
- node.js中exports与module.exports区别
- node.js 中exports和module.exports的区别
- node.js中module.exports与exports用法上的区别
- Node.js中module.exports与exports的区别
- Node.js的模块导出exports 和 module.exports 的区别
- node.js中的exports和module.exports的区别
- Node.js模块导出exports 和 module.exports 的区别
- node.js module初步理解,exports与module.exports的区别
- Node.js模块导出exports 和 module.exports 的区别
- Node.js: exports与module.exports的区别
- 详解Node.js中exports和module.exports的区别
- Node.js中exports与module.exports的区别