Created
March 18, 2016 11:14
-
-
Save simlegate/7ca5a3ac6c6492611133 to your computer and use it in GitHub Desktop.
The require of Node Module
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From https://nodejs.org/api/modules.html | |
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 './' or '/' or '../' | |
a. LOAD_AS_FILE(Y + X) | |
b. LOAD_AS_DIRECTORY(Y + X) | |
3. LOAD_NODE_MODULES(X, dirname(Y)) | |
4. THROW "not found" | |
LOAD_AS_FILE(X) | |
1. If X is a file, load X as JavaScript text. STOP | |
2. If X.js is a file, load X.js as JavaScript text. STOP | |
3. If X.json is a file, parse X.json to a JavaScript Object. STOP | |
4. If X.node is a file, load X.node as binary addon. STOP | |
LOAD_AS_DIRECTORY(X) | |
1. If X/package.json is a file, | |
a. Parse X/package.json, and look for "main" field. | |
b. let M = X + (json main field) | |
c. LOAD_AS_FILE(M) | |
2. If X/index.js is a file, load X/index.js as JavaScript text. STOP | |
3. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP | |
4. If X/index.node is a file, load X/index.node as binary addon. STOP | |
LOAD_NODE_MODULES(X, START) | |
1. let DIRS=NODE_MODULES_PATHS(START) | |
2. for each DIR in DIRS: | |
a. LOAD_AS_FILE(DIR/X) | |
b. LOAD_AS_DIRECTORY(DIR/X) | |
NODE_MODULES_PATHS(START) | |
1. let PARTS = path split(START) | |
2. let I = count of PARTS - 1 | |
3. let DIRS = [] | |
4. while I >= 0, | |
a. if PARTS[I] = "node_modules" CONTINUE | |
c. DIR = path join(PARTS[0 .. I] + "node_modules") | |
b. DIRS = DIRS + DIR | |
c. let I = I - 1 | |
5. return DIRS |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment