Node.js 模块化
一、概念
1、定义
模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。
2、编程中的模块化
遵守固定的规则(模块化规范),把一个大文件拆分成独立并互相依赖的多个小模块。
3、模块化的好处
- 提高代码的复用性
- 提高代码的可维护性
- 可以实现代码按需加载
二、Node.js的模块
1、分类
- 内置模块(如fs模块,由Node.js官方提供的)
- 自定义模块(用户创建的每个js文件,都是自定义模块)
- 第三方模块(由第三方开发的模块,使用前需要先下载)
2、加载模块
使用require方法加载
const fs = require('fs')
const custom = require('./custom.js')
//使用require方法加载,也可以省略文件后缀
const custom = require('./custom')
//正常运行
**注意:**使用require方法加载模块时,会执行模块中的代码。
3、模块作用域
定义:
在模块中定义的变量、方法等成员,只能在当前模块内被访问,这种模块级别的访问限制,叫做模块作用域。
好处:
避免了全局变量污染的问题。
4、module对象(作用:向外共享作用域成员)
介绍:
在每个.js自定义模块中都有一个modul对象,在里面存储了和当前模块有关的信息
输出module:
module.exports对象
在自定义模块中,可以使用module.exports对象,使模块内的成员共享出去,供外界使用。
外界使用require引入模块时,得到的就是module.exports对象
例子:
//node1.js
const m = require('./node2')
console.log(m);
//node2.js
module.exports.username = 'xxx'
module.exports.sayHello = function(){
console.log(hello);
}
//结论
//node1.js中引入的node2.js模块,得到的是node2.js中的exports对象
exports对象:module.exports的简写
默认情况下,exports与module.exports指向同一个对象,最终共享的结果,以module.exports指向的对象为准。
例子1:
module.exports.username = 'xxx'
module.exports.sayHello = function(){
console.log(hello);
}
module.exports = {
name : "zzz",
sayHI(){
console.log(hi);
}
}
//当module.exports指向其他对象时,以代码执行完毕module.exports的指向为准。
例子2:
module.exports = {
name : "zzz",
sayHI(){
console.log(hi);
}
}
exports.username = 'xxx'
exports.sayHello = function(){
console.log(hello);
}
//当exports与module.exports指向不同对象时,以module.exports为准。