node.js中的exports和module.exports的区别
node.js中通过require()来引用其他文件,那如果想要被其他文件所引用,就得用到exports或者module.exports。
首先,每个文件都会默认有一个module对象,测试一下
console.log(module);
结果是:
{ id: '.',
exports: {},
parent: null,
filename: 'D:\\mytest\\test.js',
loaded: false,
children: [],
paths:
[ 'D:\\mytest\\test\\node_modules',
'D:\\mytest\\node_modules',
'D:\\node_modules' ] }
别的我们不管,我们看到一个exports对象,其实别的文件通过require获得的正是这个module.exports对象,但是要明确一个关系就是exports属于module对象。
所以,我们想要导出一个文件时,可以这么写:
test.js
function add(a,b){ return a+b; } module.exports = add;
这样写呢,就是把exports对象给赋值为了add方法,也就是说,如果在本文件中再次module.exports会把之前的add方法覆盖掉,所以一般的一个文件中只会写一个module.exports。
在别的文件引用这个文件的add方法可以这么写
var add = require("./test.js"); add(1,2);
那么如果想导出多个方法或者对象怎么办呢,可以这么做
test.js
function add(a,b){ return a+b; } var info = { name:"racyily", age:22 }; exports.add = add; exports.info = info;
这时引用的时候要这么写
var test = require("./test.js"); test.add(1,2); console.log("名字:" + test.info.name + ",年龄:" + test.info.age);
这样就可以同时导出多个对象了,其实很简单,弄清楚每个文件会有默认有个module对象,module对象下面有个exports对象。别的文件通过require获得的都是那个文件的module.exports对象!
所以,如果你怕搞混,你可以全部用exports.info = info;这个样的形式。