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。

推荐阅读

    学习写字楼新选择6000元主流配置

    学习写字楼新选择6000元主流配置,,这种配置需要考虑双核心的办公和娱乐平台,充分考虑办公室的办公需求和娱乐需求,以约6000元的预算和cost-e

    酷睿I7 配置

    酷睿I7 配置,配置,玩家国度啦华硕 Rampage II Extreme(3800元)如果米不够,也可以把Extreme改为Gene,不过是小板内存推荐金士顿6G DDR3 2000骇

    鼠标不能拖动文件了

    鼠标不能拖动文件了,鼠标,拖动,本文目录鼠标不能拖动文件了电脑鼠标无法拖动软件图标了,怎么办鼠标不能滚动怎么调整电脑鼠标不能进行任何

    提高3A四核羿龙II游戏配置的性能

    提高3A四核羿龙II游戏配置的性能,,以节能环保为主题的IT产业,目前3A低端平台处理器、主板芯片组、独立开发卡性能突出,特别是在与AMD的处理

    opporeno8参数配置及价格

    opporeno8参数配置及价格,面部,亿元,Oppo的荣誉2020年1月4日,接近屏幕关闭传感器是否支持双卡:支持oppor11splus什么时候上市的Oppo R11S P

    查看配置:酷睿i3530集展示办公平台

    查看配置:酷睿i3530集展示办公平台,,由于时间和精力的关系,我们不可能对所有的配置进行评论,希望我们能理解,我希望我们的评论能在那些需要帮

    3500元超额值学生娱乐结构的优化配置

    3500元超额值学生娱乐结构的优化配置,,作为一个DIY的主流用户领域的学生,每个用户51学生攒机的高峰。因为学生用户没有稳定的收入来源,攒机