最近在看源代码,突然对exports 和 module.exports的概念有点蒙圈,于是重新学习。
在Node里,每个文件就是一个模块。
简而言之,exports是module.exports的引用,也就是说exports和module.exports指向的是内存中同一块区域。
// 1.js
console.log(module);
console.log(exports);
console.log(exports === module.exports);
//node 1.js 执行后打印
Module {
id: '.',
exports: {},
parent: null,
filename: 'C:\\Users\\Lenovo\\deskTop\\world.js',
loaded: false,
children: [],
paths:
[ 'C:\\Users\\Lenovo\\deskTop\\node_modules',
'C:\\Users\\Lenovo\\node_modules',
'C:\\Users\\node_modules',
'C:\\node_modules' ] }
{}
true
由此可以发现,exports === module.exports。
接下来,用两个js文件演示。
// 1.js
var name = '小王吧';
exports.name = name;
// 2.js
var obj = require('./1.js');
console.log(obj);
// 执行node 1.js
// 输出 obj = { name: '小王吧' }
// 3.js
var name = '小王吧';
module.exports= name;
// 4.js
var obj = require('./3.js');
console.log(obj);
// 执行node 3.js
// 输出 小王吧
总之,就是。导出很少的数据的时候用exports,导出很多数据的时候用module.exports。
并且有module.exports的时候就不要用exports了,因为module.exports已经改变了内存的地址,并且每个文件的模块以module.exports为准。