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

最新文章

  1. 《Invert》开发日志05:终止
  2. 棒棒的毛笔字PS教程
  3. James搭建邮件服务器
  4. 运维监控利器smokeping 500报错处理
  5. CodeForces 343D 线段树维护dfs序
  6. 如何在Dreamweaver中使用zen coding
  7. java分割excel文件可用jxl
  8. img 标签 访问图片 返回403 forbidden问题
  9. PHP实现统计在线人数功能示例
  10. 【Oracle学习笔记】索引
  11. Alpha冲刺四
  12. JavaScript之关闭轮询定时器(setTimeout/clearTimeout|setInterval/clearInterval)小结
  13. For循环语句解析
  14. 【Python】【元编程】【一】动态属性和特性
  15. 利用localStorage事件来跨标签页共享sessionStorage
  16. [原创-性能调优]借助AWR报告分析解决oracleCPU过高的问题
  17. Zabbix 源码编译安装
  18. TOJ 3248 Flip Game
  19. [原创]Linux实现服务延迟启动
  20. 从100PV到1亿级PV网站架构演变(转)

热门文章

  1. python ftp文件夹文件递归上传推送
  2. python中len 小练习:获取并输出集合中的索引及对应元素
  3. 输出1到n以内的素数
  4. Weex与Android交互(二)
  5. String StringBuffer和StringBuilder区别及性能
  6. Vue.js Failed to resolve filter: key
  7. python 可迭代对象与迭代器
  8. vue:一个vue可以使用的视频插件
  9. JSP基本_JavaBeans
  10. sql中case when语句的使用