为什么要模块化开发:
因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块。但是有个前提:标准的统一
读懂这篇文章:
https://blog.youkuaiyun.com/m_review/article/details/78643967
前端模块化的诞生:
CommonJS:
2009年,美国程序员Ryan Dahl创造了node.js项目,将javascript语言用于服务器端编程。这标志"Javascript模块化编程"正式诞生。 NodeJS是CommonJS规范的实现,webpack 也是以CommonJS的形式来书写。(其实2007年国外模块化已经出现)
CommonJS是同步加载模块的。对于后端,加载模块的速度取决于计算机硬盘的读写速度(速度很快)。但是对于前端。我们需要等模块加载完毕才能执行相对应的操作。这个时候浏览器会处在假死状态(js语言单线程决定的)。
AMD:
对于以上问题。对于模块加载。我们需要执行异步操作,不能同步去处理。由此就出现异步加载的规范 AMD。AMD是"Asynchronous Module Definition"的缩写。意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。
CMD:
大名远扬的玉伯写了seajs,就是遵循他提出的CMD规范,与AMD蛮相近的,不过用起来感觉更加方便些,最重要的是中文版,应有尽有:seajs官方doc
对比AMD和CMD的异同
https://github.com/seajs/seajs/issues/277
关于ES6模块化
https://juejin.im/post/5c17ad756fb9a049ff4e0a62
最后附上需要深入了解链接:
https://www.cnblogs.com/chenguangliang/p/5856701.html