1-14node中的commonjs规范的实现

1-14node中的commonjs规范的实现

node中的模块 1.内置模块、核心模块 2.第三方模块 commander/co 3.文件模块

es6Module“静态”导入,comminjs模块“动态导入”

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返回结果

概述require方法做了哪些操作

将文件路径转为绝对路径,并且读取文件内容,为其包装一个函数,使函数执行,将文件内容赋值给module.exports,最终返回module.exports。

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部