1-15node中commonjs规范的实现

1-15node中commonjs规范的实现

▲实现myRequire整体流程如下:

▲把文件名解析成一个绝对路径出来

定义类Module

打印出没有文件后缀的路径

判断文件是否存在,不存在就不用加后缀了

定义文件后缀的策略,以便未来方便对后缀进行修改

Reflect.ownKeys取出对象

根据keys(上文定义的文件策略)逐个匹配,匹配到了就返回

▲获取到文件路径后,创造模块

new Module

Module._cache 做缓存第一次加载则创造缓存

▲模块的加载

获取模块中的内容,包装函数,让函数执行用户的逻辑会给module.exports赋值

封装module.load

拿到文件的扩展

根据扩展名找到对应的策略

运行

拿到文件脚本

拿到模板字符串

将模板字符串编译为函数

实现一个简写

thisValue

改变this指向

执行

json类型的文件

json文件的写法

对于json文件,直接将json挂载到exports对象上

执行

加缓存的作用——多次require也不会多次加载

注意:node中不能同时支持批量导出和导出某个属性

可以这样

▲总结

最终用户使用的结果都来自于module.exports,如果只是改变exports引用,不会影响module.exports的值...

直接使用global属性,可以不用导出了

污染全局,不建议使用

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