ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

模块

2021-12-25 22:02:14  阅读:108  来源: 互联网

标签:Node 文件 node modules 查找 模块


模块加载流程

在Node中引入模块,需要经历如下3个步骤 1.路径分析 2.文件定位 3.编译执行

模块种类

在Node中,模块分为两类,一类是Node提供的模块,称为核心模块,一类是用户编写的,称为文件模块 核心模块在Node源码编译过程中,编译进了二进制执行文件。在Node进程启动时,部分核心模块就被直接加载到了内存中,所以在引入时,文件定位和编译执行的步骤省略了,并在路径分析时优先判断,所以速度快 文件模块则是动态加载的,需要完整的路径分析、文件定位、编译执行过程,速度比加载核心模块要慢

模块缓存

Node对于引入过的模块都会进行缓存,以减少二次引入时的开销,且缓存的是编译和执行之后的对象,不论是哪种模块,require()对相同模块的二次加载都一律采用缓存优先的方式,核心模块缓存检查优先文件模块

路径分析和文件定位

require接收一个标识符作为参数,标识符主要分为一下几类: 1 核心模块,如http、fs、path 2 .或..开始的相对路径文件模块 3 以/开始的绝对路径文件模块 4 非路径形式的文件模块,如自定义的模块(如node_modules中的,查找速度最慢)

自定义模块

node_modules中的都是自定义模块 自定义模块的引入会沿着当前目录逐级向上层找node_modules,有点类似原型链查找,所以路径越深,查找模块越耗时
// [
//     'e:\\nodejs\\node_modules',
//     'e:\\node_modules'
// ]
module.paths

文件扩展名分析

require在分析标识符的过程中,若无扩展名,会按照.js .json .node次序补足,依次尝试

目录和包分析

在分析标识符过程中,require通过分析文件扩展名之后,可能没有查找到对应文件,但却得到一个目录,此时会当做包来处理。 1.首先查找package.json中的main属性,对指定文件名进行定位,若缺少文件名,则进入扩展名分析,若main中指定的文件若无,或压根就没有package.json文件,Node会将index当做默认文件名 2..然后依次查找index.js index.json index.node,若还是没有定位到文件,则进入下一个模块路径查找,若最终依然没有查找到目标文件,抛出异常

标签:Node,文件,node,modules,查找,模块
来源: https://www.cnblogs.com/xt112233/p/15731732.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有