在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
中,并不能正确的导出结果。