Node:模块机制学习笔记

本文详细探讨了Node.js的模块机制,包括CommonJS规范、Node.js的模块实现、路径分析、文件定位、模块编译及缓存加载。还介绍了AMD和CMD规范在前端场景的应用,以及Node.js中包与NPM的管理。
摘要由CSDN通过智能技术生成

模块机制

1. CommonJS

1. 模块规范

a. 模块引用

  • 在CommonJS中,存在require()方法,接收模块标识,以此引入一个模块的API到当前模块中。

b. 模块定义

  • 对应引入功能,上下文提供了exports对象用于导出当前模块的方法或者属性,并且是唯一的出口。
  • 在模块中,module对象代表模块自身,而exports是module的属性。
  • 在Node中,一个文件就是一个模块,将方法挂载在exports对象上作为属性即可定义导出的方式。

c. 模块标识

  • 模块标识其实就是传递给require()方法的参数,它必须是小驼峰命名法的字符串,可以没有后缀.js。

CommonJS构建的这套模块导出和引入机制使得用户无需考虑全局污染的问题。

2. Node的模块实现
  • Node在引入模块时需要经历如下三个步骤:

    1. 路径分析

    2. 文件定位

    3. 编译执行

  • Node的模块分为两类:核心模块和用户自定义的文件模块。

  • 核心模块在Node源代码编译过程中已经被编译进了二进制的执行文件。在Node进程启动时,部分核心模块就直接被加载进内存中,所以这部分核心模块引入时可以省略前两个步骤,加载速度是最快的。

  • 文件模块实在运行时动态加载,需要完整地经历上面三个步骤,速度比加载核心模块慢。

2.1 优先从缓存加载
  • Node对引入过的模块都会进行缓存,以减少第二次引入时的开销。
  • Node缓存的时编译和执行后的对象。
  • 不论是核心模块还是文件模块,require方法对相同模块的二次加载都采用缓存优先的方式,这是第一优先级的。且核心模块的缓存检查优先于文件模块。
2.2 路径分析
  • 核心模块

    1. 核心模块的优先级仅次于缓存加载,在Node的源代码编译过程中已经编译进了二进制代码,加载过程最快。
    2. 如果文件模块的标识符与核心模块相同,如果试图加载之是不会成功的。解决方法可以采用路径引入。
  • 路径形式的文件模块

    1. 在分析文件模块时,require方法会将路径转化为真实路径,以真实路径为索引,将编译执行后的结果存放到缓存中,以使第二次加载更加迅速。

    2. 由于指定了路径,查找过程中可以节约大量的时间。

  • 自定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值