在Node.js中,导出一个对象可以用exports,也可以用module.exports,但是这两者是有些区别的。
先看一个例子:
1 | //snippet-1: |
可以看到,这种情况下,module.exports和exports的效果是一样的。再看另外一个例子:
1 | //snippet-2: |
在这个代码段中,foo1.js并没有导出想要的对象,为什么呢?
在Node.js中,exports是module.exports的一个引用,Node.js的官方文档中,给出了一个require()的简单的实现:
1 | function require(/* ... */) { |
这就不难理解了,如果这样导出对象:
1 | exports = 'xxx'; |
其实是修改了exports的指向:不再是之前的module.export的指向;而在Node.js中是通过module.exports导出对象的,
所以在snippets-2中,并不能正确的导出结果。