模块化
模块化的好处
CommonJS规定的内容
Node.js中模块的三大分类各自是什么
能够使用npm管理包
了解什么是规范的包结构
能够了解模块的加载机制
模块化:遵循固定的规则,把一个大文件拆成独立并相互依赖的多个小模块
规范:()遵循一定语法格式,暴露和引入的相关规范格式
好处:
提高代码的复用性
提高代码的可维护性
可以实现按需加载
三大类:
内置模块
自定义模块
第三方模块
Require用于加载相关模块
模块作用域:防止全局变量的污染问题
向外共享模块中的成员的(注意点):永远以module.exports指向的对象为准
Exports和module.exports指向同一个对象
Require()模块时,得到的永远是module.exports指向的对象
CommonJS规定的内容
Node.js遵循了CommonJS模块化规范,CommonJS规定了模块的特性和各模块之间的如何相互依赖
规定:
每个模块内部,module变量代表当前模块
Module变量是一个对象,他的exports属性(module.exports)是对外的接口
加载某个模块,其实是加载该模块的module.exports属性
注意点:包管理配置文件
【Package-lock.json:配置文件,记录相关包的相关信息等等安装指定版本的包 @符号+‘版本号’
最新的安装命令会覆盖以前的包文件】
模块加载机制:
模块在第一次加载后呗缓存、多次调用require()不会导致模块的代码被执行多次
使用require()导入自定义模块时,如果省略了文件的扩展名,则按顺序分别加载一下的文件:
- 按照确切的文件名进行加载
- 不全 . Js扩展名
- 不全. Json扩展名
- 不全 . node扩展名进行加载
第三方模块的加载机制
如果传递给require ()的穆凯标识符不是一个内置模块,也没有“./” ”../”开头,则node.js会从当前模块的父目录开始,尝试从/Node_modules文件中加载第三方模块,如没有找到,咋移动到再上一层目录中,继续从node_modules文件中进行寻找需要的文件
目录作为模块
当把目录作为模块标识符,传递给require()进行加载的时候,有三种加载方式:
- 先被加载的目录下查找一个叫做package,json的文件,并寻找main属性,做为require()加载入口
- 如没有package,json文件,或者main入口不存在或无法解析,则node.js将试图加载目录下的index,js文件