module.exports和exports的区别 - pod4g/tool GitHub Wiki
这两个的区别,只要知道下面两点就够了
- 首先两者指向的是同一个对象
console.log(exports === module.exports) // true
- 其次导出的永远都是
module.exports
所指向的对象
// a.js
exports = ['a.js']
// b.js
module.exports = ['b.js']
// c.js
module.exports.c = ['c.js']
// d.js
exports.d = ['d.js']
// index.js
const a = require('./a')
const b = require('./b')
const c = require('./c')
const d = require('./d')
console.log(a) // {} ,注意:并不是['a.js'],原因见下面的说明
console.log(b) // ['b.js']
console.log(c) // {c: ['c.js']}
console.log(d) // {d: ['d.js']}
因为导出的对象永远都是module.exports
所指向的对象,所以就会造成当 exports = ['a.js']
的时候,这个['a.js']
,并不会被导出,因为exports
虽然指向了一个新对象['a.js']
,但是module.exports
并没有指向它
那么既然有了module.exports
为什么要定义exports
别名呢?这是为了解决下面的问题:
// 如果没有别名的话,我们必须要这样写
module.exports.c = ['c.js']
// 现在有了别名,我们只需这样写就好了
exports.c = ['c.js']
其实理由很朴素,就是为了少写module.
这几个字符而已