手写Node模块系统-执行字符串中的代码
Node 模块
在 CommonJS 规范中 一个文件
就是 一个模块
。
在 CommonJS 规范中暴露数据通过 exports
进行暴露。
在 CommonJS 规范中导入模块通过 require()
进行导入需要使用的模块。
Node 模块原理分析
既然一个文件就是一个模块, 既然想要使用模块必须先通过 require()
导入模块, 所以可以推断出 require()
的作用其实就是 读取文件
, 所以要想了解 Node 是如何实现模块的, 必须先了解如何执行读取到的代码。
执行从文件中读取的代码
我们都知道通过 fs
模块可以读取文件, 但是读取到的数据要么是 二进制
, 要么是 字符串
无论是二进制还是字符串都无法直接执行, 但是我们知道如果是字符串, 在 JS 中是有办法让它执行的可以通过 eval
或者 new Function
来进行执行。
通过 eval 执行代码
<script>
let str = "console.log('www.it6666.top');";
eval(str);
</script>
执行结果如下所示:
存在依赖关系, 字符串可以访问外界数据, 不安全。
<script>
let name = "BNTang";
let str = "console.log(name);";
eval(str);
</script>
通过 eval
执行代码的缺点: 存在依赖关系, 字符串可以访问外界数据, 不安全。
通过 new Function 执行代码
<script>
let str = "console.log('www.it6666.top');";
let fn = new Function(str);
console.log(fn);
fn();
</script>
执行结果如下所示:
还是一样的问题存在依赖关系, 字符串可以访问外界数据, 不安全。
<script>
let name = "BNTang";
let str = "console.log(name);";
let fn = new Function(str);
fn();
</script>
通过 new Function 执行代码的缺点: 存在依赖关系, 依然可以访问全局数据, 不安全。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具