nodejs(13)模块加载机制
模块加载机制
优先从缓存中加载
当一个模块初次被
require
的时候,会执行模块中的代码,当第二次加载相同模块的时候,会优先从缓存中查找,看有没有这样的一个模块!好处:提高模块的加载速度;不需要每次都重新执行并加载模块!
核心模块的加载机制
先查找缓存;如果缓存中没有,再去加载核心模块;
用户模块的加载机制
先查找缓存;
如果缓存中没有则尝试加载用户模块;
如果在加载用户模块时候省略了后缀名,则:
首先,严格按照指定的名称去查找 其次,尝试加载后缀名是 .js 的文件 如果没有.js的文件,则尝试加载 .json 结尾的文件 如果没有 .json 的文件,则尝试加载 .node 结尾的文件 查找规则:index -> index.js -> index.json -> index.node
第三方模块的加载机制
先在当前模块的父目录中,查找
node_modules
文件夹在
node_modules
文件夹下,查找模块相关的文件夹在对应的文件夹下,查找
package.json
的文件查找
package.json
文件中的main
属性(指定了模块的入口文件)如果找到了
main
属性,同时,main
属性指定的文件路径存在,那么尝试加载main
属性指向的模块,直到加载成功为止;假如
main
属性指向的文件不存在,则直接报错:Error:Cannot find module ***
假如没有
main
属性,或者没有package.json
,那么会依次尝试加载index.js
,index.json
,index.node
;如果没有
index
相关的文件,或node_modules
中,没有模块名称对应的文件夹,或者,当前项目根目录中没有node_modules
文件夹,则向上一层目录中查找node_modules
,查找规则同上!最后,如果在项目所在磁盘的盘符根目录中,还找不到对应模块,则报错:
cannot find module ***
nodejs(13)模块加载机制的更多相关文章
- nodejs之模块加载机制
nodejs模块加载原理 node加载模块步骤: 1) 路径分析 (如判断是不是核心模块.是绝对路径还是相对路径等) 2) 文件定位 (文件扩展名分析, 目录和包处理等细节) 3) 编译执行 原生模块 ...
- 【前端】CommonJS的模块加载机制
CommonJS的模块加载机制 CommonJS模块的加载机制是,输入的是被输出的值的拷贝.也就是说,一旦输出一个值,模块内部的变化就影响不到这个值. 例如: // lib.js var counte ...
- Dojo初探之1:AMD规范,编写符合AMD规范(异步模块加载机制)的模块化JS(其中dojo采用1.11.2版本)
一.AMD规范探索 1.AMD规范(即异步模块加载机制) 我们在接触js的时候,一般都是通过各种function来定义一些方法,让它们帮我们做一些事情,一个js可以包含很多个js,而这些functio ...
- Skywalking-13:Skywalking模块加载机制
模块加载机制 基本概述 Module 是 Skywalking 在 OAP 提供的一种管理功能特性的机制.通过 Module 机制,可以方便的定义模块,并且可以提供多种实现,在配置文件中任意选择实现. ...
- nodejs js模块加载
本文地址:http://www.cnblogs.com/jasonxuli/p/4381747.html nodejs的非核心模块(core module)加载主要使用的就是module.js. 项目 ...
- Node.js中模块加载机制
1.模块查找规则-当模块拥有路径但没有后缀时:(require(‘./find’)) require方法根据模块路径查找模块,如果是完整路径,直接引入模块: 如果模块后缀省略,先找同名JS文件,再找同 ...
- node模块加载机制。
- javascript 异步模块加载 简易实现
在javascript是没有类似java或其他语言的模块概念的,因此也不可能通过import或using等关键字来引用模块,这样造成了复杂项目中前端代码混乱,变量互相影响等. 因此在复杂项目中引入AM ...
- browserify.js 的模块加载
browserify的模块加载基本上和nodejs的类似: nodejs 的模块加载是依次去读取文件然后用一个类eval() 函数执行并返回module.exports的结果.为了避免循环加载,在加载 ...
随机推荐
- SQL注入过WAF(11.4 第三十三天)
WAF是什么? Web应用防护系统(也称:网站应用级入侵防御系统.英文:Web Application Firewall,简称: WAF).也叫Web防火墙,主要是对Web特有入侵方式的加强防护,如D ...
- 10nm Ice Lake处理器值得等待!
处理器.显卡等产品往往习惯先在 Linux 平台测试,所以 Linux 的内核源码往往成为曝光新品的宝藏之地. 经查,在 Linux v5.2 内核最新源码的 x86 分支中,出现了多款 Ice La ...
- [ cocos2d-JS ] 启动项目
1, 打开windows命令行 2, cd 到项目的文件夹 3, 执行 cocos run -p web
- Redis 详解 (五) redis的五大数据类型实现原理
目录 1.对象的类型与编码 ①.type属性 ②.encoding 属性和 *prt 指针 2.字符串对象 3.列表对象 4.哈希对象 5.集合对象 6.有序集合对象 7.五大数据类型的应用场景 8. ...
- redis的配置文件介绍
目录 1.开头说明 2.INCLUDES 3.MODULES 4.NETWORK 5.GENERAL 6.SNAPSHOTTING 7.REPLICATION 8.SECURITY 9.CLIENTS ...
- 配置anaconda 的仓库镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config -- ...
- 云时代架构阅读笔记一——Java性能优化(一)
Java语言学习了这么长时间之后,自己对于Java编程的一些细节还是稍微有点总结,正好根据云时代架构中<Java高级开发必会的50个性能优化的细节(珍藏版)>来叙述一些我和里面的点比较相符 ...
- 二十七、SAP中通过以字段的形式输出内容
一.输出时,需要加入关键词sy-vline,代码如下 二.效果如下
- 第三节MapStruct翻译--Defining a mapper
第三节MapStruct--Defining a mapper 在这一章节你将学到如何用mapstruct和它的一些必要的操作选项来定义一个bean mapper. 3.1 Basic mapping ...
- Cobalt Strike简单使用(9,29第十五天)
本文转自:https://www.cnblogs.com/yuanshu/p/11616657.html 一.介绍: 后渗透测试工具,基于Java开发,适用于团队间协同作战,简称“CS”. CS分为客 ...