导出模块就是导出对象,export和module.exports两者区别:
假如建立一个空白的js文件,并通过require方式加载该文件。
通过console.log的方式可以看出,该模块是一个空的json对象。
exports 就是为空文件导出的模块对象增加属性。
module.exports 既可以为导出模块增加属性,又可以统一设置属性。
let jQuery = {} // 这句相当于建立js文件,什么代码都不写,引入的时候,就会返回空json对象
jQuery.ajax = function() {...}
// 这句相当于 exports.ajax = function() {...}
// 也相当于 module.exports.ajax = function() {...}
// 但不一定相当于 module.exports = {ajax: function(){...}},因为只有模块对象为空的时候,这句才会和上面等价,如果模块对象不为空,这句会将原先模块对象的其他对象都清空掉。
// 可以多次导出多个属性
exports.func = str => console.log(str)
exports.test = str => console.log(str)
// 返回结果 { func : [Function] , test : [Function] }
// module.exports只认最后一次导出设置
module.exports = {
func: str => console.log(str)
}
module.exports = {
test : str => console.log(str)
}
// 返回结果 { test : [Function: test] }
// demo01
exports.func = str => console.log(str)
exports.test = str => console.log(str)
// demo02
module.exports = {
func: str => console.log(str)
}
module.exports = {
test: str => console.log(str)
}
// demo03
// index.js
const demo01 = require('./demo01')
const demo02 = require('./demo02')
const demo03 = require('./demo03')
demo01.func('I\'am demo01.func')
demo01.test('I\'am demo01.test')
console.log(demo01) // 返回 { func: [Function], test: [Function] }
demo02.test('I\'am demo02.test')
console.log(demo02) // 返回 { test: [Function: test] }
console.log(demo03) // 返回 {}
当导出模块的时候,如果什么代码都不写,返回的是空json对象;
如果用exports写,那么exports每调用一次,只能设置返回模块的指定属性;
如果用module.exports写,那么即可以设置返回模块的整个对象,也可以设置返回模块的指定属性;