1、编写一个程序,将一个小写字母(如a
361 2023-04-03 03:26:52
commonjs模块定义了自己的规范,导入和导出
一个包中含有多个模块(每个包都必须配置一个package.json文件)
es6Module和commonjs读取文件的不同
module.exports原理
模块实现原理(看源码,先横向扩展,再纵向深入。避免一个函数看到底)
1.实现一个require方法
2.Module._load
实现模块的加载
3.Module._resolveFilename
返回被require的文件的绝对路径
4.保存文件的绝对路径————实现模块的缓存
module.exports会在第一次缓存起来,后续再去使用的话,取上次的返回值
es6使用export{},导出的是一个变量(接口),如果内部对应的值发生变化是有影响的
5.会尝试加载是不是一个原生模块,如果带相对路径、绝对路径,就不是核心模块
6.根据文件路径创建一个模块
Module方法内部(一个模块必须有三个属性:id,path,exports)
7.模块的加载
load方法内部
8.记载模块时会构建一个paths属性,这个属性就是第三方模块的查找路径
9.取出文件的后缀 Module._extensions
调用对应加载模块的策略
extensions内部
10.读取文件内容对字符串进行编译compile
compile内部
11.wrapSafe安全包裹,在文件内容外部包裹一层
Module.wrap
Module.wrap内部
runInThisContext将函数变成js去执行
默认的this是空对象
文件内容是hello
将文件内容赋值给module.exports
12.最终require方法会拿到module.exports返回结果
将文件路径转为绝对路径,并且读取文件内容,为其包装一个函数,使函数执行,将文件内容赋值给module.exports,最终返回module.exports。