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)
情况1: require加载一个路径下的js(注意就算传入的是相对路径,最后的查找过程也会被转成绝对路径去查找)
上面这种情况只会打印一次加载1.js 因为require加载的时候会判断是否有缓存, 第一次加载就会放到缓存中,第二次就会直接从缓存中拿,就不会去加载1.js. 所以只打印一次。 找不到就会加上 .js .cjs .node 后最后查找
情况2: 加载系统模块, fs ,path require 会判断是否是系统模块,会将找到的模块添加到缓存并返回。
情况3: 加载 第三方模块, 首先在当前目录的node_modules查找,如果找不到就递归查找父级目录
情况4: 有缓存,直接使用缓存