1. 什么是模块化
模块化是指解决一个复杂问题时, 自顶向下逐层把系统划分成若干模块的过程, 对于整个系统来说, 模块是可组合、分解和更换的单元。
2. 编程领域中的模块化
编程领域中的模块化, 就是遵守固定的规则, 把一个大文件拆成独立并互相依赖的多个小模块。
把代码进行模块化拆分的好处。
- 提高了代码的复用性
- 提高了代码的可维护型
-
3. 模块化规范
模块化规范就是对代码进行模块化的拆分与组合时, 需要遵守的那些规则, 例如:
使用什么样的语法格式来引用模块
- 在模块中使用什么样的语法格式想外暴露成员
模块话规范的好处: 大家都遵守同样的模块化规范写代码, 降低了沟通的成本, 极大方便了各个模块之间的相互调用, 利人利己。
4. Node.js中模块的分类
Node.js中根据模块来源不同, 将模块化分为3大类,分别是:
- 内置模块(内置模块是由Node.js官方提供的, 例如fs,path,http等)
- 自定义模块(用户创建的每个.JS文件, 都是自定义模块)
- 第三方模块(由第三方开发出来的模块, 并非官方提供的内置模块, 也不是用户创建的自定义模块, 使用前需要先下载)
5. 加载模块
使用强大的require()方法,可以加载需要的内置模块、用户自定义模块、第三方模块进行使用。
注意: 使用require()方法加载其他模块时, 会执行被加载模块中的代码。//加载内置的fs模块
const fs = require('fs');
//加载用户的自定义模块
const custom = require('./custom.js')
//加载第三方模块
const moment = require('moment)
6. 什么时模块作用域
和函数作用域类似, 在自定义模块中定义的变量、方法等成员, 只能在当前模块内被访问, 这种模块级别的访问限制叫做模块作用域。
模块作用域的好处: 防止全局变量污染的问题。7. module对象
在一个自定义模块中, 默认情况下, module.exports = {}
在外界使用require导入。
通过module.exports对象向外共享成员。
在外界使用require导入的自定义模块的时候, 得到的成员, 就是那个模块中,通过module.exports指向的那个对象。 ```javascript //index3.js const str = ‘哈哈, 我是index3.js’ console.log(str) module.exports = str;
//index4.js
const aa = require(‘./index3’)
console.log(aa)
//哈哈, 我是index3.js
**共享成员时注意:**<br />使用**require()**方法导入模块时, 导入的结果, 永远以**module.exports**指向的对象为准。![clipboard.png](https://cdn.nlark.com/yuque/0/2022/png/27402074/1655295560291-f292c4d6-6f53-4c85-9ace-2cc15fc2c16d.png#clientId=uba26c2fc-4c6b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=286&id=u29dd68a9&margin=%5Bobject%20Object%5D&name=clipboard.png&originHeight=286&originWidth=1431&originalType=binary&ratio=1&rotation=0&showTitle=false&size=45605&status=done&style=none&taskId=ue530fe38-e42e-4aeb-b0f2-3debcf93234&title=&width=1431)
<a name="Vg1Xu"></a>
# 8. exports对象
由于**module.exports**单词拼起来比较复杂, 为了简化向外共享成员的代码,** Node**提供了**exports**对象。 默认情况下,**exports和module.exports指向同一个对象。** 最终共享的结果,还是以**module.exports**指向的对象为准。<br />![clipboard.png](https://cdn.nlark.com/yuque/0/2022/png/27402074/1655295595153-1de65a92-cc4b-46f5-af3f-1ac458844fb8.png#clientId=uba26c2fc-4c6b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=362&id=u6fa3bc1c&margin=%5Bobject%20Object%5D&name=clipboard.png&originHeight=362&originWidth=1184&originalType=binary&ratio=1&rotation=0&showTitle=false&size=191986&status=done&style=none&taskId=u711f943b-babc-4994-a700-2e65416ee4a&title=&width=1184)
```javascript
// index3.js
exports.name = 'Lisa'
module.exports = {
name:'Iric',
age:20
}
//index4.js
const obj = require('./index3')
console.log(obj) //{ name: 'Iric', age: 20 }
9. NodeJS中的模块化规范
NodeJS遵循了CommonJS模块化规范, CommonJS规定了模块化的特性和各模块之间如何相互依赖。
CommonJS规定:
- 每个模块内部,module变量代表当前模块
- module变量是一个对象, 它的exports属性,即module.exports是对外的接口。
加载某个模块
, 其实是加载改模块的module.exports属性, require()方法用于加载模块