模块加载机制

优先从缓存中加载

  • 当一个模块初次被 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.jsindex.json, index.node;

  • 如果没有index相关的文件,或node_modules中,没有模块名称对应的文件夹,或者,当前项目根目录中没有node_modules文件夹,则向上一层目录中查找node_modules,查找规则同上!

  • 最后,如果在项目所在磁盘的盘符根目录中,还找不到对应模块,则报错:cannot find module ***

nodejs(13)模块加载机制的更多相关文章

  1. nodejs之模块加载机制

    nodejs模块加载原理 node加载模块步骤: 1) 路径分析 (如判断是不是核心模块.是绝对路径还是相对路径等) 2) 文件定位 (文件扩展名分析, 目录和包处理等细节) 3) 编译执行 原生模块 ...

  2. 【前端】CommonJS的模块加载机制

    CommonJS的模块加载机制 CommonJS模块的加载机制是,输入的是被输出的值的拷贝.也就是说,一旦输出一个值,模块内部的变化就影响不到这个值. 例如: // lib.js var counte ...

  3. Dojo初探之1:AMD规范,编写符合AMD规范(异步模块加载机制)的模块化JS(其中dojo采用1.11.2版本)

    一.AMD规范探索 1.AMD规范(即异步模块加载机制) 我们在接触js的时候,一般都是通过各种function来定义一些方法,让它们帮我们做一些事情,一个js可以包含很多个js,而这些functio ...

  4. Skywalking-13:Skywalking模块加载机制

    模块加载机制 基本概述 Module 是 Skywalking 在 OAP 提供的一种管理功能特性的机制.通过 Module 机制,可以方便的定义模块,并且可以提供多种实现,在配置文件中任意选择实现. ...

  5. nodejs js模块加载

    本文地址:http://www.cnblogs.com/jasonxuli/p/4381747.html nodejs的非核心模块(core module)加载主要使用的就是module.js. 项目 ...

  6. Node.js中模块加载机制

    1.模块查找规则-当模块拥有路径但没有后缀时:(require(‘./find’)) require方法根据模块路径查找模块,如果是完整路径,直接引入模块: 如果模块后缀省略,先找同名JS文件,再找同 ...

  7. node模块加载机制。

  8. javascript 异步模块加载 简易实现

    在javascript是没有类似java或其他语言的模块概念的,因此也不可能通过import或using等关键字来引用模块,这样造成了复杂项目中前端代码混乱,变量互相影响等. 因此在复杂项目中引入AM ...

  9. browserify.js 的模块加载

    browserify的模块加载基本上和nodejs的类似: nodejs 的模块加载是依次去读取文件然后用一个类eval() 函数执行并返回module.exports的结果.为了避免循环加载,在加载 ...

随机推荐

  1. 六、Vue-Router:基础路由处理、路由提取成单独文件、路由嵌套、路由传参数、路由高亮、html5的history使用

    一.vue-router的安装 官网文档 [官网]:https://cn.vuejs.org/v2/guide/routing.html [router文档]:https://router.vuejs ...

  2. springboot指定配置文件运行

    1.springboot指定配置文件运行 创建三个配置文件如下: application.properties内容如下: spring.profiles.active=rabbit如上配置,在运行时就 ...

  3. 吴裕雄--天生自然java开发常用类库学习笔记:取得当前日期

    import java.util.* ; // 导入需要的工具包 class DateTime{ // 以后直接通过此类就可以取得日期时间 private Calendar calendar = nu ...

  4. writeObiect与序列化反序列化

    在写仿QQ聊天工具中,客户端与服务端之间的通信一开始是采用的是InputStream和OutputStream,这导致在数据传输过程中,登录信息,注册信息等难以区分,这时我给传输的数据加了标识来分辨信 ...

  5. springcloud--ribbo(负载均衡)

    ribbo:是Netflix公司开源的一个负载均衡的项目,是一个客户端负载均衡器,运行在客户端上. 实际运用案例(基于springcloud入门案例): 一.新建Module:springcloud- ...

  6. python 获取cpu、内存、硬盘等实时信息 psutil

    psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(CPU,内存,磁盘,网络等)信息,主要应用于系统监控,分析和限制系统资源及进程的管理,它实现了同等命令行工具提供的功能,如ps, ...

  7. 简单的js队列

    简单的js队列 /** * [Queue] * @param {[Int]} size [队列大小] */ function Queue(size) { var list = []; //向队列中添加 ...

  8. hdu 1950 Bridging signals 求最长子序列 ( 二分模板 )

    Bridging signals Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. css 径向渐变

    .example { width: 150px; height: 80px; background: -webkit-radial-gradient(red, green, blue); /* Saf ...

  10. 第一部分 JavaScript语言核心(三)

    第六章 对象 P123 在ES3中,点运算符后的标识符不能是保留字.如果一个对象的属性名是保留字,name必须使用方括号的形式访问它们,如o["for"]和o["clas ...