-
Notifications
You must be signed in to change notification settings - Fork 207
Open
Labels
Description
什么是AMD(不是做显卡的:joy:)?如果不熟的话,require.js
总应该比较熟。
AMD是_Asynchronous Module Definition_的缩写,字面上即异步模块定义。require.js
是模块加载器,实现了AMD的规范。
本文想说的就是怎么实现一个类似require.js
的加载器。但在这之前,我们应该了解下JS模块化的历史。
https://github.com/Huxpro/js-module-7day
这个Slides讲的比我好的多,所以想了解前端模块化的前世今生的可以去看看。这里简单总结下:
为什么需要模块化?
- Web Pages正在变成 Web App,应用越大那么代码也越复杂;
- 模块化利于解耦,降低复杂性和提高可维护性;
- 应用部署可以优化代码,减少http请求(避免多模块文件造成的多请求)。
前端模块历史?
- 无模块,全局作用域冲突;
- namespace封装,减少暴露给全局作用域的变量,本质是对象,不安全;
- IIFE;
- 添加依赖的IIFE,即模块化,也是现代模块化的基础;
但模块化还需要解决加载问题:
- 原始的script tag,有难以维护,依赖模糊,请求过多的问题;
- script loader,如Lab.js,基于文件的依赖管理;
- module loader,YUI;
- CommonJS,node提供的模块化和加载方案,由于是同步/阻塞加载,所以只适合服务器/本地;
- AMD/CMD,异步加载;
- Browserify/Webpack,去掉
define
包裹,在打包时解决模块化; - ES6带来语言原生的模块化方案。
dohard-ma, TaoHuaXia, Weiting-Zhang and jawil