模块化使用的定义
什么是模块化
把代码按照逻辑和功能封装成为各种不同的模块就是代码的模块化。
模块化使用的优点
通过把代码的各自封装,相互独立,降低代码的耦合性的同时,可以自行决定引入执行那些外部模块以及暴露自身的那些模块,有效提升了代码的复用能力和开发效率。
Node.js模块化开发使用实践
Node.js的模块的类型
1.内置模块
2.自定义模块
3.第三方模块
模块的创建和导出
module.exports和exports的使用
Node.js与其他语言使用的区别在于,Node.js在建立模块之后,导出模块前需要把模块的变量和方法共享出去。module.exports和exports就是可以实现这个功能,但是exports是以module.exports为主特点如下:
module.exports和exports同时共享对象时
module.exports和exports同时共享对象时,只有module.exports有效
//这里会替代之前的用法 与上面其实指向同一个对象
module.exports={
nickname:'小黑子',
sayhi(){
console.log("露出鸡脚")
}
}
//这里也可以使用,但以上面使用为主,require模块的时候,也是使用module.exports
exports = {
nickname:'纯路人,',
sayhi(){
console.log("真的没必要")
}
}
//直接打印属性可以发现导入的其实module.exports这个对象
const m2 = require('./module102')
//直接导入无法获得module的属性和方法
console.log(m2)
//可直接读取的方法
console.log(m2.nickname)
m2.sayhi()
module.exports和exports同时共享变量时
当同时共享都是变量时,这两种语法都能起作用,但是当变量名相同时,module.exports优先级高于exports
exports.hobby="唱,跳,rap"
module.exports.name="只因"
module.exports.hobby="铁山靠"
//导入模块
const m2 = require('./module101')
console.log(m2);
exports属性可以赋予module.exports
module.exports.username="zhangsan"
exports.getAddress=function(){
console.log('test')
}
exports.age=11
module.exports = exports
原因分析
模块化使用是对module对象的使用,moduel.exports和exports初始化指向的对象都是相同的,对对象赋值时,将会修改整个的地址值,由于moduel.exports的优先级更高,才会造成上述的现象
模块记载机制小知识点
加载次数:模块优先从缓存里面加载,使用require的时候,加载模块一次
加载的优先级: 内置模块加载优先级>第三方加载机制