commonJS与AMD、CMD、UMD规范总结

194 阅读1分钟

这篇文章的主要目的是对以上四个概念有清楚的理解,希望看完文章后可以分辨它们之间的关系,至于具体的使用场景和相关内容,感兴趣的同学欢迎在评论分享或者自行百度

commonJS

先说commonJS,因为它是伴随着javascript中模块这个概念而出现的,用来在服务端(node环境)中将代码进行分模块处理,也正是因为在服务器中执行,所以require用法是同步加载模块,因为服务器的各个模块都保存在硬盘中,加载读取模块不会造成太长的阻塞时间

AMD规范

js不仅可以在服务端运行,也可以在客户端中运行代码,但是客户端中的模块请求需要经过服务器,如果还是采用同步的方式就会造成页面渲染阻塞,这样就出现AMD规范(异步模块定义 Asynchronous Module Definition),而且是依赖前置,提前进行异步加载,目前有两个JS库实现了AMD规范——require.js和curl.js,客户端默认都是同步向服务端请求js数据,想要实现异步加载的话,可以在script标签内添加defer或者async来实现:

  1. defer 表示异步加载,顺序执行
  2. async 表示异步加载,加载完成后阻赛当前代码块执行(立即执行)
<script defer>
<script async>

CMD规范

也是用于客户端异步加载模块,不过采用依赖就近原则

UMD规范

可以看成commonJS + AMD, 会优先判断是否支持Node(是否支持exports),支持则使用commonJS; 再判断是否支持AMD(是否支持define 和 define.amd),支持则使用AMD规范。