文章目录
一、什么是模块化
编程领域中的模块化,就是遵守固定的规则,把一个大文件拆成独立并互相依赖的多个小模块。
把代码进行模块化拆分的好处:
- 提高了代码的复用性
- 提高了代码的可维护性
- 可实现按需加载
二、模块分类
1、Node.js中模块的分类
Node.js中根据模块来源的不同,将模块分为三大类,分别是:
- 内置模块:内置模块是由js官方提供的,例如:fs path、http等。
- 自定义模块:用户创建js文件都是自定义模块。
- 第三方模块:由第三方开发出来的模块,并非官方提供的内置模块,也不是用户创建的自定义模块,使用前需要先下载。
注意:使用require()方法加载这些模块时,会执行被加载模块中的代码
三、模块作用域
1、什么是模块作用域
和函数作用域类似在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问,这种模块级别的访问限制叫做模块作用域。
例如:
//模块1 custom.js
const username='张三'
//模块2 test.js
const custom = require('./custom.js')
console.log(custom)
输出空对象
在test.js文件中无法访问custom.js模块中的私有成员
2、模块作用域的好处
防止全局变量污染的问题。
使用js标签的src属性进行文件引入的方式,在导入文件时,都把变量username声明到了全局window对象身上,造成变量污染
3、向外共享当前作用域变量
module.exports对象
在自定义模块中,可以使用 module.exports 对象,将模块内的成员共享出去,供外界使用。外界require()方法导入自定义模块时,得到的是module.exports所指的对象
exports对象
由于module.exports单词写起来比较复杂,为了简化向外共享的成员代码,Node提供了exports对象。默认情况下module.exports和exports指向同一个对象。最终共享结果还是以module.exports为准。
三、CommonJS规范
Node.js遵循了CommonJS模块化规范,CommonJS规定了模块的特性和各模块之间如何相互依赖。
CommonJS规定:
1、每个模块内部,module变量代表当前模块
2、module变量是一个对象,他的exports属性(即 module.exports)是对外的接口
3、加载某个模块其实是加载该模块的module.exports属性,requies()方法用于加载模块