模块的加载机制

只要使用 require 来加载指定的模块了,那么,必然会执行被加载模块中的代码
优先从缓存中加载,Node中,默认会把曾经加载过的模块,缓存到内存中,这样,当下次再使用相同的模块,就直接从缓存中加载就行了,能够提高模块的运行效率;

  • 核心模块的加载机制
1. 先从缓存中查找,如果有,则直接使用;
2. 如果缓存中没有,则加载本地的核心模块并缓存起来,供下次使用;
  • 用户模块的加载机制
1.先从缓存中查找,如果有,则直接使用;
2.如果缓存中没有,则根据路径标识符,加载本地的用户模块并缓存起来,供下次使用;
3.用户模块的查找规则:index    ->    index.js    ->   index.json     ->    index.node
  • 第三方模块的加载机制
1.先从缓存中查找,如果有,则直接使用;
2.如果缓存中没有,则根据第三方模块的标识符,加载第三方模块并缓存起来,供下次使用;
3.第三方模块的查找规则: 
			1.会根据包的名称,直接在当前项目的根目录中,去查找一个叫做 node_modules 的文件夹;
			2.如果有,则在 node_modules 中,继续查找,一个叫做 模块引用名称的文件夹;
			3.如果有,则 在 模块对应的文件夹中,查找一个叫做 package.json 的文件;
			4.如果有 package.json, 则查找 其中的 main 属性,并尝试加载 main 指定的文件作为入口;
			5.如果能正常加载 main 属性中指定的文件,则模块/包加载成功!
			6.如果 在 package.json 文件中,没有 main 属性,则会依次尝试加载 包根目录中的 index.js, index.json, index.node
			7.如果在 包的根目录中,根本没有 package.json 文件,或者 在 node_modules 目录中没有 index 相关的文件,或者,根本没有对应的包文件夹,或者在项目根目录中根本没有node_modules, 则会向上层目录中,去查找node_modules, 查找规则同上;
			8.如果在上一层目录中还是没有找到对应的模块,则继续向上翻,直到翻到项目所在的磁盘根目录位置;
9.如果翻到了磁盘的根目录中,还没有找到,此时,会报错!cannot find module ***
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值