exports module.exports

在 node.js 中,每一个文件都有一个模块。 模块间相互联系就必须暴露出变量、函数、或对象。

暴露:module.exportsexports
依赖:require()

网上讲 module.exportsexports 的文章特别多,写下本文是为了做个笔记。

require()的返回值是module.exports这个对象
它是看不到exports对象的

node.js 会为每个模块(文件) 加入如下代码:

module.exports = exports = {};

//...

exports 只是 module.exports 的引用。举个不太恰当的例子: module.exports 是公司 exports是程序员(你)公司太小 你忍忍

module.exports = exports = {};

exports.c = //...
exports.java = //...
exports.ruby = //...
exports.node = //...

你写出来的无论是 c 、java、ruby或node 都是公司的 公司都有权使用
如果你有一天不写程序了,公司就生气了:你今后再写程序我也不要了

module.exports = exports = {};

exports.c = //...
exports.java = //...
exports.ruby = //...
exports.node = //...
exports=//...       你变了
exports.php = //... 你写出的东西公司不要了

现在这时候,你之前写的东西公司还是会用的,自从你变了之后,公司就不敢用你的程序了,公司要另请高人了。

module.exports = exports = {};

exports.c = //...
exports.java = //...
exports.ruby = //...
exports.node = //...
exports=//...       你变了
exports.php = //... 你写出的东西公司不要了
module.exports = //... 完了,公司把唯一的程序员换了,你之前写的那些垃圾公司都不要了

那么我们何时使用 exports 何时使用 module.exports 呢?

To add functions and objects to the root of your module, you can add them to the special exports object.
If you want the root of your module’s export to be a function (such as a constructor) or if you want to export a complete object in one assignment instead of building it one property at a time, assign it to module.exports instead of exports.

什么意思呢?

如果你的模块希望暴露一些方法和对象给别人使用,就把这些加到 exports 属性中
如果你的模块就希望暴露一个方法比如构造函数 或一个完整的对象 就赋值给 module.exports

总结:你爱怎么用就怎么用,别直接对 exports 赋值就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值