Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Day373:说下 Node 中 require 模块引入的查找方式? #1207

Open
Genzhen opened this issue Aug 25, 2021 · 0 comments
Open

Day373:说下 Node 中 require 模块引入的查找方式? #1207

Genzhen opened this issue Aug 25, 2021 · 0 comments
Labels
Node teach_tag

Comments

@Genzhen
Copy link
Collaborator

Genzhen commented Aug 25, 2021

每日一题会在下午四点在交流群集中讨论,五点小程序中更新答案
欢迎大家在下方发表自己的优质见解

二维码加载失败可点击 小程序二维码

扫描下方二维码,收藏关注,及时获取答案以及详细解析,同时可解锁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 当成文件名或目录名加载

4)抛出 "not found"

@Genzhen Genzhen added the Node teach_tag label Aug 25, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Node teach_tag
Projects
None yet
Development

No branches or pull requests

1 participant