首页 > 其他分享 >Day 06 模块加载机制

Day 06 模块加载机制

时间:2023-01-05 10:33:09浏览次数:54  
标签:node 06 require modules js 模块 Day 加载

模块加载机制

一、优先从缓存中加载

  • 模块在第一次加载后会被缓存,多次调用require()不会导致模块的代码被执行多次
  • 不论内置模块、自定义模块、第三方模块都会从缓存中加载,从而提高加载效率

二、内置模块的加载机制

  • 内置模块优先级最高,例如:require('fs'),始终返回内置的fs模块,即使在node_modules中有fs模块

三、自定义模块加载机制

  • 使用require()加载自定义模块时,必须使用./或../开头的路径标识符,否则会将自定义模块当作内置模块或第三方模块加载
  • 同时,在使用require0导入自定义模块时,如果省略了文件的扩展名,则Node.js会按顺序分别尝试加载以下的文件:
    • 按照确切的文件名进行加载
    • 补全js扩展名进行加载
    • 补全json扩展名进行加载
    • 补全.node扩展名进行加载
    • 加载失败,终端报错

四、第三方模块加载机制

  • 如果传递给require0的模块标识符不是一个内置模块,也没有以'./'或'../'开头,则Node.js会从当前模块的父目录开始,尝试从/node_modules文件夹中加载第三方模块。
  • 如果没有找到对应的第三方模块,则移动到再上一层父目录中,进行加截,直到文件系统的根目录。
  • 例如,假设在'C.Users\itheima\project\foo.js'文件里调用了require(tools'),则Node.js会按以下顺序查找:
    • C:\Users\itheima\project\node_modules\tools
    • C:\Users\itheima\node_modules\tools
    • C:\Users\node_modules\tools
    • C:\node_modules\tools

五、目录作为模块

  • 当把目录作为模块标识符,传递给require()进行加载的时候,有三种加载方式:
    • 在被加载的目录下查找一个叫做package.json的文件,并寻找main属性,作为require()加载的入口
    • 如果目录里没有package.json文件,或者main入口不存在或无法解析,则Node.js将会试图加载目录下的index.js文件
    • 如果以上两步都失败了,则Node.js会在终端打印错误消息,报告模块的缺失:Error:Cannot find module 'xxx'

标签:node,06,require,modules,js,模块,Day,加载
From: https://www.cnblogs.com/xiubai/p/17026847.html

相关文章

  • 构建Feign项目时候,装载bean失败,只加载到一个
    描述:加载过程当中发现注入的bean只会加载本地包下的实现。无法访问远程服务。解决方案:启动类加上@EnableFeignClients,开启feign的功能远程方法由于是实现api模块下......
  • Python学习day02
    一、用户交互1.猜年龄death_age=80name=input("yourname:")age=int(input("yourage:"))print("yourname"name)print("youcanstilllivefor"death_age-age"yea......
  • Java面试题Day02
    11.this和super的区别?this指向的是自身的一个对象,代表对象本身,super指向的是自己的一个超类对象,这个超类对象是最近的一个父类.this()调用的是本类其他构造方法,supe......
  • CF1060H - Sophisticated Device
    题意输入给定常数\(d,p\)。有\(5000\)个内存块,初始时\(1\)的值为\(x\),\(2\)的值为\(y\),其余的值为\(1\)。你有三种操作:+abc:将\(a\)内存块和\(b\)内存......
  • day01-ES6新特性
    ES6新特性1.ES6是什么?DCMAScript6.0(以下简称ES6)是JavaScript语言的下一代标准,2015年6月发布ES6设计目标:达到JavaScript语言可以用来编写复杂的大型程序,成为企业级......
  • Day9:学习循环结构
    循环结构while循环do…while循环for循环在java5中引入了一种主要用于数组的增强型for循环while循环while是最基本的循环,它的结构为:while(布尔表达式){......
  • 刷刷刷Day7| 15. 三数之和
    15.三数之和LeetCode题目要求给你一个整数数组nums,判断是否存在三元组[nums[i],nums[j],nums[k]]满足i!=j、i!=k且j!=k,同时还满足nums[i]+nums[j]+......
  • 前端网页设计day02
    目录元素之间的关系元素选择器伪类选择器伪元素属性选择器元素之间的关系父元素:直接包含子元素的元素子元素:直接被父元素包含的元素祖先元素:直接或间接包含后代元素的......
  • Markdown学习笔记——DAY01
    Markdown学习标题:#+空格学习二级标题:##+空格以此类推字体粗体helloworld两星斜体helloworld一星粗体加斜体helloworld三星划去线helloworld两波浪引用......
  • Day2 Java基础小记
    Java基础小记Java特性和优势简单性面向对象可移植性性高性能分布式动态性多线程安全性健壮性Java为什么能够成功?Java三大版本JavaSE:标准版(桌面程序,控......