Day373:说下 Node 中 require 模块引入的查找方式?
Genzhen opened this issue · 0 comments
Genzhen commented
每日一题会在下午四点在交流群集中讨论,五点小程序中更新答案
欢迎大家在下方发表自己的优质见解二维码加载失败可点击 小程序二维码
扫描下方二维码,收藏关注,及时获取答案以及详细解析,同时可解锁800+道前端面试题。
Require 内部逻辑(摘自官方文档)
当 Node 遇到 require(X)
时,按照下面的顺序处理。
1)如果 X 是内置模块(比如 require('http')
)
- a.返回该模块
- b.不再继续执行
2)如果 X 以./
或者 ../
开头
- a.根据 X 所在的父模块,确定 X 的绝对路径。
- b.将 X 当成文件,依次查找下面文件,只要其中有一个存在,就返回该文件,不再继续执行。(也就是把 X 跟下面的几种文件格式进行匹配,匹配到了就会依照相应的文件格式进行加载)
+----------------------+
| .x |
| .x.js |
| .x.json |
| .x.node |
+-------------------- +
- c.将 X 当成目录,一次查找下面文件,只要其中有一个存在,就返回该文件,不再继续执行。
+----------------------------+
| .X/package.json(main 字段) |
| .X/index.js |
| .X/index.json |
| .X/index.node |
+--------------------------- +
3)如果 X 不带路径
a.根据 X 所在的父模块,确定 X 可能的安装目录。
b.依次在每个目录中, 将 X 当成文件名或目录名加载