今天学习了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.