commonJS规范中模块自带的属性

在 node 中,模块分为 核心模块其他模块(也可以叫自定义模块,用户写的,或者从npm上下载下来的模块)

  • 核心模块指的就是 node 提供的模块,如 fs、http 等模块。

    • 核心模块是直接通过node源码直接编译成二进制文件
    • 在node进程启动时,部分核心模块就直接加载在内存中了,比如 console,是不需要引入的
    • 核心模块加载速度是最快的
  • 自定义模块就是用户自己写的或者加载第三方的模块

在使用commonJS规范的node模块中,每个模块中都自带了5个属性。
分别是 module,exports,require,__filename,__dirname 这5个。

// app.js
    console.log(module);        // 输出 module 对象

    console.log(exports);       // 输出 exports 对象
    
    console.log(require);      // 这是一个函数 
    
    console.log(__filename);   //  当前模块所在路径 + 当前模块
    
    console.log(__dirname);   //  当前模块所在的路径
    node app.js   # 通过 node 运行 app.js

module对象的属性

#  console.log(module); 的输出
Module {
  id: '.',                          # 当前模块id
  exports: {},                      # 表示当前模块暴露给外部的对象
  parent: null,                     # 表示调用当前模块的模块
  filename: 'F:\common\app.js',   # 当前模块的绝对路径
  loaded: false,                    # 布尔值,表示当前模块是否被完全加载
  children: [],                     # 表示当前模块调用的模块
  paths: [ 'F:\common\node_modules', 'F:\node_modules' ] 
}

module的加载过程

  1. 通过计算获取模块的绝对路径
  2. 判断是否存在缓存,如果有,加载缓存
  3. 判断是否是核心模块
  4. 生成模块的实例,存进缓存
  5. 加载模块
  6. 输出模块的exports属性

参考: 《深入浅出Node.js》作者:朴灵 第二章 模块机制

开发工具
原文地址:https://www.cnblogs.com/cisbest/p/13516559.html