首页 » 网站建设 » php匿名函数require技巧_require模块加载函数详解

php匿名函数require技巧_require模块加载函数详解

访客 2024-11-20 0

扫一扫用手机浏览

文章目录 [+]

https://www.jianshu.com/p/a309864c8357 https://blog.csdn.net/u010476739/article/details/80925128 https://www.cnblogs.com/zhoulixue/p/8757546.html http://www.javashuo.com/article/p-bywkbpzj-d.html https://juejin.cn/post/6844903704123211783

加载的模块类型:

1、原生内置模块 存在:原生内置模块缓冲区中,直接返回缓存结果,不实行原生内置模块代码 不存在:原生内置模块缓冲区中,实行原生内置模块代码,把模块加入缓冲区,并返回实行结果

2、路径文件模块 (1)、构建文件绝对路径列表 存在后缀名(.js | .json | .node) 利用path.resolve("路径") 拼接一个绝对路径,推入文件绝对路径列表 不存在后缀名 利用 path.resolve("路径"+".js") 拼接一个绝对路径的 .js 文件,推入文件绝对路径列表 利用 path.resolve("路径"+".json") 拼接一个绝对路径的 .json 文件,推入文件绝对路径列表 利用 path.resolve("路径"+".node") 拼接一个绝对路径的 .node 文件,推入文件绝对路径列表 是否存在 path.resolve("路径") 目录 存在 是否存在package.json文件 存在 是否存在main属性(若main没指定后缀名,那会利用 .js | .json | .node,按照顺序查找) 存在 利用path.resolve(path.jon("路径",'main属性值')) 拼接一个绝对路径的文件,推入 文件绝对路径列表 不存在 利用path.resolve(path.jon("路径",'index.js')) 拼接一个绝对路径的 .js 文件,推入 文件绝对路径列表 利用path.resolve(path.jon("路径",'index.json')) 拼接一个绝对路径的 .json 文件,推入 文件绝对路径列表 利用path.resolve(path.jon("路径",'index.node')) 拼接一个绝对路径的 .node 文件,推入 文件绝对路径列表 不存在 利用path.resolve(path.jon("路径",'index.js')) 拼接一个绝对路径的 .js 文件,推入 文件绝对路径列表 利用path.resolve(path.jon("路径",'index.json')) 拼接一个绝对路径的 .json 文件,推入 文件绝对路径列表 利用path.resolve(path.jon("路径",'index.node')) 拼接一个绝对路径的 .node 文件,推入 文件绝对路径列表 (2)、遍历文件绝对路径列表 ,查看是否在require.cache['文件路径']缓冲区中 存在 读取缓冲区中的模块,不实行文件模块的代码,直接返回缓存的结果(require.cache['文件路径'].exports) 不存在 报错找不到模块

php匿名函数require技巧_require模块加载函数详解

3、第三方包模块 (1)、获取模块可能存在的目录列表 module.paths (2)、构建 文件绝对路径列表 遍历 目录列表 module.paths 第一个元素 利用(path.join(目录元素,包名+".js") 拼接一个绝对路径的 .js 文件,推入 文件绝对路径列表 利用(path.join(目录元素,包名+".json") 拼接一个绝对路径的 .json 文件,推入 文件绝对路径列表 利用(path.join(目录元素,包名+".node") 拼接一个绝对路径的 .node 文件,推入 文件绝对路径列表 判断 path.join(目录元素,包名) 目录是否存 存在 判断目录下是否存在package.json文件 存在 是否存在main属性 存在 利用 path.jon(目录元素",包名,'main属性值')) 拼接一个绝对路径的文件,推入 文件绝对路径列表 不存在 利用 path.jon(目录元素",包名,'index.js')) 拼接一个绝对路径的文件,推入 文件绝对路径列表 利用 path.jon(目录元素",包名,'index.json')) 拼接一个绝对路径的文件,推入 文件绝对路径列表 利用 path.jon(目录元素",包名,'index.node)) 拼接一个绝对路径的文件,推入 文件绝对路径列表 不存在 连续遍历 目录列表 module.paths 不存在 连续遍历 目录列表 module.paths (3)、遍历文件绝对路径列表,查看是否在require.cache['文件路径']缓冲区中 存在 读取缓冲区中的模块,不实行文件模块的代码,直接返回缓存的结果(require.cache['文件路径'].exports) 不存在 报错找不到模块

php匿名函数require技巧_require模块加载函数详解
(图片来自网络侵删)
5、require 3种文件的加载办法

如果是.js文件,则经由fs模块同步读取文件为字符串,然后包装字符串为匿名函数字符串,然后利用vm.runInThisContext实行为JavaScript代码,末了调用传参。
如果是.json文件,则经由fs模块同步读取文件往后用 JSON.parse() 解析返回结果 如果是.node文件,则经由 dlopen()方法 加载末了编译天生的工具。
.node 是C/C++编写的扩展文件

标签:

相关文章

SEO优化视角下的北京租房推荐网站

我国房地产市场的竞争愈发激烈。在众多房地产领域,租房市场成为了备受关注的热点。为了满足广大租房者的需求,众多租房推荐网站应运而生。...

网站建设 2025-04-08 阅读0 评论0

成都SEO矩阵营销打造高效网络营销新格局

网络营销已成为企业竞争的重要手段。在众多营销策略中,SEO矩阵营销以其独特的优势,逐渐成为企业提升品牌知名度和网站流量的重要途径。...

网站建设 2025-04-08 阅读0 评论0