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;这个样的形式。

原文地址:https://www.cnblogs.com/racyily/p/3623357.html