nodejs 学习(一)

node 模块实现

优先从缓存加载

路径分析和文件定位

模块标识符分析

核心模块

http,fs,path
核心模块其实分为 C/C++编写的和 JavaScript 编写的两部分,其中 C/C++文件存放在 Node 项目的 src 目录下,JavaScript 文件存放在 lib 目录下。
内建模块(由纯 C/C++编写的部分),因为它们通常不被用户直接调用
Node 的 buffer、crypto、evals、fs、os 等模块都是部分通过 C/C++编写的

路径形式的文件模块

模块路径(沿路径向上逐级递归,直到根目录下的 node_modules)

自定义模块

可能是一个文件或者包的形式

文件定位

文件扩展名分析

node 会按.js .node .json 的次序补足扩展名
如果是.node 和.json 文件,在传递给 require()的标识符中带上扩展名,会加快一点速度
同步配合缓存,可以大幅度缓解 Node 单线程中阻塞式调用的缺陷

目录分析和包

node 在前目录下查找 package.json->index.js->index.node->index.json

模块编译

  • js文件 (通过fs模块同步读取文件后编译执行)
  • node文件 (用c/c++编写的扩展文件,通过dlopen()方法加载最后编译生成的文件)
  • json文件。通过fs模块同步读取文件后,用JSON.parse()解析返回结果。
  • 其余扩展名文件。它们都被当做.js文件载入
### js模块编译 ### c/c++模块编译
.node的模块文件并不需要编译,因为它是编写C/C++模块之后编译生成的