0
点赞
收藏
分享

微信扫一扫

nodejs的模块引用原理

yeamy 2022-09-30 阅读 248

今天学习了ts,一开始书中就讲解了前端模块。其中,ts中的动态查找就模仿了nodejs。所以,本文就来梳理下nodejs的模块解析流程。

前置概念

核心模块和文件模块。核心模块就是nodejs中自带模块,例如:fs、path、file等。文件模块则是用户自定义,或者第三方库的模块。

引用流程

直接上总流程:

require(X) from module at path Y
1. If X is a core module,
   a. return the core module
   b. STOP
2. If X begins with '/'
   a. set Y to be the filesystem root
3. If X begins with './' or '/' or '../'
   a. LOAD_AS_FILE(Y + X)
   b. LOAD_AS_DIRECTORY(Y + X)
   c. THROW "not found"
4. If X begins with '#'
   a. LOAD_PACKAGE_IMPORTS(X, dirname(Y))
5. LOAD_PACKAGE_SELF(X, dirname(Y))
6. LOAD_NODE_MODULES(X, dirname(Y))
7. THROW "not found"

流程解析

例如Y文件中require('X')。

如果X是核心模块,也就是fs等。就会直接从内存中读取,速度是最快的。因为核心模块在编译阶段就被处理成二进制,并且放到了内存。所以引用时,直接命中。

然后若X是'/'的话,就会相对于根目录。 然后若X是'./'、'/'、'../'则相对于当前页面。解析顺序如下: 1.

举报

相关推荐

0 条评论