大概7,8年前学习过前端模块的相关只是,那时候还是jQuery时代,前端模块的概念处于萌芽阶段。经过前端在这几年的疯狂迭代,前端模块的发展已经完全超过我的想象,如果不会写就不写出正规的前端代码了。这边就在这里简单总结一下前端模块的知识,所有知识均来自互联网。
模块的意义:
- 增加可维护性
- 减少全局污染
- 可复用
- 依赖管理
闭包的模块化
这种方式就是我以前学习过的模式。简单粗暴。
CommonJS规范
CommonJS是Node.js的模块和规范。适用于服务端。
CommonJS模块是同步加载的。对于后端来说同步加载没什么问题,但是对于前端同步加载是不能忍受的。
AMD规范
James Burke提出了AMD规范。RequireJS即AMD的一个实现。这是一个给前端使用的模块化方案。
AMD使用异步加载,解决了CommonJS在前端的不足。在后端也可以使用AMD规范,响应的工具是amdefine。
AMD规范定义了一个全局方法define,该方法用来定义和加载模块。
RequireJS后期提供了require方法来加载模块。
CMD规范
玉伯(支付宝前端工程师)提出CMD规范,并给出实现:sea.js
CMD使用懒加载,使得CMD本身更加接近CommonJS。
sea.js提供了 seajs.use
方法,来运行已经定义的模块。所有 define
的回调函数都不会立即执行,而是将所有的回调函数进行缓存,只有 use
之后,以及被 require
的模块回调才会执行。
ES Module
ES6提供了模块化方案,统一了浏览器和服务端,采用了完全静态化的方式进行模块加载。
参考资料: