前端的模块化发展

模块化与组件化的区别

  1. 模块化解耦复杂度,即将功能分成小块
  2. 组件化我理解为可复用的功能,比如写一个轮播组件,基于Vue框架的UI组件库中的一个组件
  3. 以下主要讨论模块化的历史

最初

在一个index.html里的script块里我们直接写很多js代码

随后

用引入一个js文件替代这种方式。在js文件里的代码不断增多时,可以把一个js中不同功能的部分抽离出来,写成多个js文件。

  1. MVC

一个js文件中的代码又可用MVC来设计,具有很好的可读性。

  1. 依赖顺序

<script src="a.js"></script>
<script src="b.js"></script>

这种方式下,依然需要用script方式引入多个js文件,严重依赖于引入顺序,若b模块依赖a模块,则顺序错误时便会出错。
import export的方式解决了这一问题,明确了每部分模块的依赖关系。

Node.js出世

适用于服务器端的规范——CommonJs

  • 使用require来获取依赖模块
  • 不能用于浏览器端

浏览器端的模块解决方案

  1. AMD(Asynchronous Module Definition)规范

  • 非原生
  • RequireJs实现
  1. CMD(Common Module Definition)规范

  • 玉伯,自立门户
  • 非原生
  • SeaJs实现
  1. AMD和CMD差异

  • 主要在于何时加载和运行依赖项?
  • AMD 声明依赖后即将依赖模块运行
  • CMD在需要依赖时才会运行依赖模块。

统一规范

CommnJs,RequireJs,SeaJs,众多规范看起来实在头疼,好在es6要解决模块问题了

  1. ES6Module

在之前众多非原生解决方案后,ES6提出module模块,以exportimport方式来解决依赖问题。
但是目前浏览器还未支持,因此不能直接运行。一般使用babel将其转为浏览器能运行的版本(向过去转换)

  1. 特性
  • ES6中,import引入的依赖在编译时加载或称为静态加载

Ref

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容