Node 模块加载汇总

Nodejs 模块大概可分为4种:

a) builtin module Nodejs中以C++形式提供的文件模块。

b) constant module Nodejs中定义常量的文件模块。

c) native module Nodejs中以javascript形式提供的核心模块。

d) 第三方module 由第三方提供的文件模块。

一、模块加载步骤

1、路径查找

文件查找是先查找当前目录的node_modules,然后查找父目录的node_modules,然后逐级向上查找

2、文件定位

1) 缓存
2) 如果是绝对路径, 则直接按路径读取并编译
3) 如果是“/”则直接从/node_modules目录查找
4) 如果是相对路径, 则生成如下查询规则,

[/home/myapp/mydir/node_module‘,/home/myapp/node_module‘   
    ‘/home/node_module‘,/node_module‘
]
 

5) 从上述数组中取出第一个目录作为查找对象, 如果存在结束查找
6) 然后依次尝试添加.js、.json、.node后缀继续查找, 如果存在则结束
7) 尝试将require参数作为一个包查找, 读取目录下的package.json文件, 取得main参数指定的文件
8) 根据指定的文件未找到, 如果没有,执行第6步
9) 如果main参数不存在或者第8步未找到, 则查找该目录下index文件, 如果没有, 执行第6步
10) 如果依然没有找到, 则开始取出数组第二条路径, 然后执行5-7步。 直到数组中最后一个值
11) 如果还没找到, 抛出异常
在这里插入图片描述

3、模块编译

编译分为三种情况,js模块、c/c++模块、json模块

4、模块缓存

核心模块编译成功后缓存在NativeModule._cache
文件模块编译成功后缓存在Module._cache

相关参考

  1. Nodejs模块载入运行原理
  2. node.js 中的核心模块 Core Modules 加载顺序及规则
  3. 深入浅出node.js学习笔记—node模块加载机制
  4. 深入浅出nodejs(一) 模块加载机制
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章