node.js中 exports 与 module.exports 的区别

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


tip:Node.js 中规定每一个js文件都叫做一个模块

模块成员导出有两种方法

exports 与 module.exports都是模块成员的导出

// 方法一
exports.str = str;
// 方法二
module.exports.str = str;

下面我们来具体介绍这两种方法到底有什么差异

exportsmodule.exports的别名(地址引用关系),当exports 对象和moudle.exports 对象指向的不是同一个对象时,最终以module.exports 为准

首先我们有两个js文件分别是a.js 和 b.js 如下
/* a.js */

var sum= 1;
var str = '123'
// 向模块外部导出数据
module.exports.sum= sum;
module.exports.str = str;
// 注:上面两句代码可以简写为: module.exports = { sum, str }

/* b.js */

var a = require('./a.js')
// 也可写为var a = require('./a')
// 注:导入模块时后缀可以省略
// 使用导入的a模块的变量
console.log(a.sum, a.str)

以下代码希望你自己敲一遍以便更直观的感受理解

/* a.js */
var sum = 1;
var str = '123';
exports.sum = sum;
module.exports.str = str;

/* b.js */
var a = require('./a.js')
console.log(a); // { sum:1,str:'123' }

// 此时我们在a.js文件中添加以下代码,给module.exports从新指定一个对象
module.exports = {
    uname: 'zhangsan'
}
/* b.js */
var a = require('./a.js')
console.log(a); // { uname:'zhangsan' }

// 我们继续在a.js中写入以下代码,因为最终以module.exports 为准,
// 所以给exports重新指定一个对象的写法是无效的、错误的
exports = {
    age: 20
}
/* b.js */
var a = require('./a.js')
console.log(a); // { uname:'zhangsan' }


总结:当exports 对象和moudle.exports 对象指向的不是同一个对象时,最终以module.exports 为准,我们在导出模块成员时,尽量使用 module.exports 以便出现不必要的麻烦











谢谢观看
如有出错,请及时联系,以便更改

你可能感兴趣的:(node.js)