reuqire(‘’) 加载规则
管他对不对,看就完事了~~~~~~~
两种加载机制
一、 优先重缓存加载 (加载过的文件会缓存起来,不会重复加载)
- 大家先看看下图:
- 由于a.js中加载了b.js了 所以 在main.js中不会再加载 a了,所以最后在控制台打印的是
我是a.js
我是b.js
我是main.js
- 但是main.js中require(‘b.js’) 会拿到b.js导出的接口对象,不会重新执行b.js中的代码
- 目的: 避免重复加载,提高模块加载效率
二、require判断加载标识//也就是require(‘加载的模块标识’)
- 核心模块 标识
- 第三方模块 标识
- 自己写的模块 标识
- 如果是非路径的模块标识(如果不是 / ./ …/) 直接报错 原因:
- node 会把他当成核心模块或者 第三方模块加载,找不到就报错
- 首位为 ** / ** 的话加载的是文件所处磁盘的根目录 (c:/、d:/)几乎不用
- 核心模块
- 直接使用加载就行,(默认被封装编译到了二进制文件中了)
- 第三方模块
- 第三方包一般通过npm 来下载,为什么第三方模块不会和核心模块加载冲突?
- 因为不可能有第三方模块名会和核心模块名一样(规定)
加载第三方模块的原理:
- 当require(‘第三方报名’)后
- 先找到当前文件所在目录中的node_module文件夹(npm出来的第三方)
- 找到node_module文件夹中对应加载模块名的文件夹
- 在找到package.json 文件
- 找到package.json文件中的 main 这个属性(main属性记录了 第三方包的入口模块)
- 然后使用这个第三方包,实际上最终加载的还是文件
如果文件package.json不存在或者main属性没有值,
- require会默认加载该包中的 index 文件(index 为默认被选项)
如果加载文件中的当前目录中没有node_module文件夹的话
- require就会查找上一级目录中是否有node_module文件夹
- 如果有,继续执行以上操作,如果没有在到上上一级查找,直到找到磁盘根目录好找不到就报错(和作用域链差不多)(不会去他兄弟中查找)
- 基本就这些了····