commonjs 的加载过程

37 阅读1分钟

image.png commonjs.js 模块导出:1.js console.log('加载1.js') modules.exports = {

fn() { console.log('123') }

}

导入:

const a = require('1.js')

a.fn()

settimeout(()=>{ const aa = require('1.js') },1111)



情况1require加载一个路径下的js(注意就算传入的是相对路径,最后的查找过程也会被转成绝对路径去查找)
上面这种情况只会打印一次加载1.js  因为require加载的时候会判断是否有缓存, 第一次加载就会放到缓存中,第二次就会直接从缓存中拿,就不会去加载1.js. 所以只打印一次。 找不到就会加上 .js  .cjs  .node 后最后查找

情况2: 加载系统模块, fs ,path  require 会判断是否是系统模块,会将找到的模块添加到缓存并返回。

情况3: 加载 第三方模块, 首先在当前目录的node_modules查找,如果找不到就递归查找父级目录

情况4: 有缓存,直接使用缓存