yezheyu:
模块化的发展史:
- 在单文件的开发中,所以的业务都写在一个文件中,当代码量大时,代码就变得臃长,耦合性高
- 所以出现了模块化管理,要把业务拆分到一个个文件中,每个文件既是一个模块
- 同时为了突出模块的一体性,CommonJS 规范中提出包(package)概念,把一组负责相同功能的模块包装在一个文件夹中,用于整体对外提供功能,并使用一个 package.json 文件描述项目信息,并建议使用 bin 目录存放二进制目录,doc 目录存放文档,lib 目录存放 JavaScript 代码,test 目录存放单元测试
- 为了方便管理包,还开发出了 npm 工具来管理
对于 node 中的模块化实现,是类似下面这种方式实现的吗?
实现猜测:node 在内存中使用模块路径作为 key ,模块中暴露的数据(module)作为 value 在内存中生成一个 k-v 内存数据库,把所有暴露的模块数据保存在内存中
-
当使用 require 函数从数据库中获取路径参数所指定的模块暴露的数据时,先执行指定的模块,把模块包装到一个函数中执行(防止模块中变量暴露为全局变量),如果文件名在数据库中已存在则不执行(防止重复导入)
// a.js console.log(arguments.callee + ""); // 执行 node a.js 的输出是一个函数字符串,说明模块中代码被 node 包装到一个函数中执行 function (exports, require, module, __filename, __dirname) { console.log(arguments.callee+''); }
- 并把需要暴露的数据绑定到这个模块(module)的 exports 对象上,保存到数据库中。因为数据库中的数据是导入时才生成,所以很精简
- 最后获取模块暴露的数据 exports 返回给 require 函数
from V2EX-最新主题 https://ift.tt/OgHwR7D
- 本文固定链接: https://niul.net/531663.html
- 转载请注明: 分享菌 于 牛叻网(NiuL.Net) 发表