首页 > V2EX > V2EX-最近学习了下前端的模块化,自己做了些笔记,想请大家帮我看看有没有理解错的
2023
05-29

V2EX-最近学习了下前端的模块化,自己做了些笔记,想请大家帮我看看有没有理解错的

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

最后编辑:
作者:分享菌
这个作者貌似有点懒,什么都没有留下。

留下一个回复