Node学习笔记(二)Node中的模块化思想

71 阅读3分钟

一:什么是模块化 编程领域中的模块化,就是把一个大文件,依据某种固定的规则拆分成相互独立的小文件。 把代码拆分成这种小文件的好处有:

  • 提高了代码的复用性
  • 可以实现按需加载
  • 提高了代码的可维护性

二:Node中的模块化

  • Node.js中根据模块来源的不同,可以将模块分为三类,分别是
  • 内置模块(node官方提供的模块,如fs、path、http等)
  • 自定义模块(用户创建的js文件,都可以作为自定义模块引入)
  • 第三方模块(第三方开发的模块,使用之前需要使用npm下载) 使用方式,通过require()方法引入。例如:

image.png 在我们将.js文件向外暴露的时候,每个自定义的js模块中都有一个module对象,他里面存储了和当前模块有关的信息,我们引入一个js模块的时候,其实就是引入它的module.exports属性。这个属性也是一个对象。也可以直接写exports,但是exports与module.exports一起写的时候,以module.exports为准。

Node.js遵循了CommonJS的模块化规范,CommonJS规定了模块的特性和各模块之间如何香菇依赖,上面我们讲到的module exports等都是COmmonJS中所规定的。具体包括:

  • 每个模块内部,module变量代表当前模块
  • module是一个对象,它的exports属性是对外的接口
  • 加载某一个模块,其实就是加载module。exports属性,require()方法用于加载模块

三:使用npm管理第三方模块 npm提供了一个快捷命令,可以快速创建package.json这个包管理配置文件

npm init -y

package.json中会自动记录我们用到的包的名称和版本号。 协同开发时,可以通过npm install 命令一次性安装package.json中的所有包 在安装包时,有些包我们只在开发阶段用到,在项目上线之后不会用到,可以使用npm install 包名 -D 命令来把包记录到package.json中的devDependencies结点下。

四:包的结构 一个规范的包,它的组成结构必须符合以下几点要求:

  • 包必须以单独的目录存在;
  • 包的顶级目录下药包含package.json这个包管理配置文件;
  • package.json中必须包含name,version,main这三个属性,分别表示包的名字、版本号和入口文件。

五:模块的加载机制 (1)优先从缓存中加载 模块在第一次加载之后会被缓存,这也意味着require()去加载同一个模块不会导致模块里面的代码被执行多次; (2)node内置模块的优先级要高于自定义模块和第三方模块 (3)使用require()加载自定义模块时,需要使用'./'或者'../'开头的路径标志符号,否则node会把它当做内置模块或者第三方模块加载 (4)node加载自定义模块的自动补全机制,如果省略了文件的扩展名,则node会按照:确切的文件名>.js>.json>.node自动进行补全查找,如果都没找到则报错; (5)第三方模块的加载机制:node会从当前文件的父目录下的node_modules模块进行查找,如果没有找到,就会查找再上一级目录下的node_modules,知道根目录; (6)将目录作为模块加载时: 首先查找目录下的package.json文件中的main属性 作为require()的入口; 如果没有,则尝试加载目录下载index.js文件 以上两步都失败就会报错“cannot find modul'XXX'”