0%

深入浅出Node.js

第1章 Node简介

node的主要构架如下图所示:

nodeStrcture

第2章 模块机制

Node模块分两类:一类Node提供的核心模块,另一类文件模块

Node模块实现主要遵循的是commonJS,要引入模块要经历三个步骤:前两步交替执行,第三步最后执行

  • (1)路径分析

    核心模块:优先级仅次于缓存加载的,因为已经编译为二进制代码。    
    相对绝对路径模块:被当做文件模块处理,转化将路径转换为真实路径,检索,加载,编译,缓存。   
    自定义:在加载过程中,node会逐个尝试父级模块路径中路径,直到找到目标文件为止
    
  • (2)文件定位

    有扩展名: 直接定位
    无扩展名: Node会按.js .json .node补充扩展名,依次尝试。若未找到相应文件,但得到一个目录Node会将目录当成包来处理,首先在当前目录package.json解析main属性看有无指定入口文件(若无扩展名也会补充扩展名),若失败则依次查找index.js index.json index.node。
    若文件定位失败则继续向父级进行后续的路径分析

  • (3)编译执行:
    .js文件: 通过fs模块同步读取文件后编译执行
    .node文件: 这是用C/C++编写的扩展文件,通过dlopen()方法加载最后编译生成文件
    .json文件: 通过fs模块同步读取文件后,用JSON.parse()解析返回结果
    其他扩展名文件: 都会当做.js文件载入

    Node也会缓存不过是缓存的是编译和执行后的对象,require()方法对相同模块的二次加载都是优先采用缓存。

第5章 内存控制