node 加载逻辑
2024-08-24 19:41:43
【node 加载逻辑】
require(X) from module at path Y
. If X is a core module,
a. return the core module
b. STOP
. If X begins with './' or '/' or '../'
a. LOAD_AS_FILE(Y + X)
b. LOAD_AS_DIRECTORY(Y + X)
. LOAD_NODE_MODULES(X, dirname(Y))
. THROW "not found" LOAD_AS_FILE(X)
. If X is a file, load X as JavaScript text. STOP
. If X.js is a file, load X.js as JavaScript text. STOP
. If X.json is a file, parse X.json to a JavaScript Object. STOP
. If X.node is a file, load X.node as binary addon. STOP LOAD_AS_DIRECTORY(X)
. 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)
. If X/index.js is a file, load X/index.js as JavaScript text. STOP
. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP
. If X/index.node is a file, load X/index.node as binary addon. STOP LOAD_NODE_MODULES(X, START)
. let DIRS=NODE_MODULES_PATHS(START)
. for each DIR in DIRS:
a. LOAD_AS_FILE(DIR/X)
b. LOAD_AS_DIRECTORY(DIR/X) NODE_MODULES_PATHS(START)
. let PARTS = path split(START)
. let I = count of PARTS -
. let DIRS = []
. while I >= ,
a. if PARTS[I] = "node_modules" CONTINUE
b. DIR = path join(PARTS[ .. I] + "node_modules")
c. DIRS = DIRS + DIR
d. let I = I -
. return DIRS
参考:https://nodejs.org/api/modules.html
最新文章
- 《Invert》开发日志05:终止
- 棒棒的毛笔字PS教程
- James搭建邮件服务器
- 运维监控利器smokeping 500报错处理
- CodeForces 343D 线段树维护dfs序
- 如何在Dreamweaver中使用zen coding
- java分割excel文件可用jxl
- img 标签 访问图片 返回403 forbidden问题
- PHP实现统计在线人数功能示例
- 【Oracle学习笔记】索引
- Alpha冲刺四
- JavaScript之关闭轮询定时器(setTimeout/clearTimeout|setInterval/clearInterval)小结
- For循环语句解析
- 【Python】【元编程】【一】动态属性和特性
- 利用localStorage事件来跨标签页共享sessionStorage
- [原创-性能调优]借助AWR报告分析解决oracleCPU过高的问题
- Zabbix 源码编译安装
- TOJ 3248 Flip Game
- [原创]Linux实现服务延迟启动
- 从100PV到1亿级PV网站架构演变(转)