JavaScript 模块化发展史
第一阶段
在 JavaScript 语言刚刚诞生,js只用于实现小的效果,js代码通常只有几百行,专业的前端工程师还没有出现,都是后端顺带完成前端工作
大事件
-
1996年,NetScape将JavaScript语言提交给欧洲的一个标准制定阻止ECMA(欧洲计算机制造商协会)
-
1998年,NetScape在与微软浏览器IE的竞争中失利,宣布破产
第二阶段
随着ajax的出现,改变了 JavaScript 在浏览器中扮演的角色,js可以与服务器进行交互,优化了用户体验。
js代码逐渐增加,前端逻辑逐渐复杂。
但是前端规模没有进一步扩大,主要由于以下几个原因
- 浏览器解释执行JS的速度太慢
- 用户端的电脑配置不足
- 更多的代码带来了全局变量污染、依赖关系混乱等问题
大事件 - IE浏览器制霸市场后,几乎不再更新
- ES4.0流产,导致JS语言10年间几乎毫无变化
- 2008年ES5发布,仅解决了一些 JS API 不足的糟糕局面
第三阶段
到了2008年,谷歌的 V8 引擎发布,将JS的执行速度推上了一个新的台阶,甚至可以和后端语言媲美。
摩尔定律持续发酵,个人电脑的配置开始飞跃(摩尔定律指的是当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。)
同时,nodejs诞生,对模块化的需求进一步加深,
经过社区的激烈讨论,最终,形成了一个模块化方案,即鼎鼎大名的CommonJS,该方案,彻底解决了全局变量污染和依赖混乱的问题
该方案一出,立即被nodejs支持,于是,nodejs成为了第一个为JS语言实现模块化的平台,为前端接下来的迅猛发展奠定了实践基础
大事件
- 2008年,V8发布
- IE的市场逐步被 firefox 和 chrome 蚕食,现已无力回天
- 2009年,nodejs发布,并附带commonjs模块化标准
第四阶段
随着后端模块化的诞生,前段模块化也相继出现AMD,CMD,终于在2015年,ES6发布,它提出了官方的模块化解决方案 —— ES6 模块化
前端模块化的出现使得一些框架相继诞生
既然JS也能编写大型应用,那么自然也需要像其他语言那样有解决复杂问题的开发框架
- Angular、React、Vue等前端开发框架出现
- Express、Koa等后端开发框架出现
- 各种后端数据库驱动出现
要开发大型应用,自然少不了各种实用的第三方库的支持
- npm包管理器出现,实用第三方库变得极其方便
- webpack等构建工具出现,专门用于打包和部署
总结
由于ajax的出现,js代码量激增,同时也完成了更多的任务,但是由于代码量的增多,js暴露出来三个问题(1.js执行速度太慢2.用户电脑配置不高3.代码增多导致全局变量污染),v8引擎的出现与摩尔定律的发酵,解决了前两个问题,nodejs和commonJs的出现,也将前端模块化推上日程,于是出现了三种前端模块化解决方案(AMD,CMD,ES6),前端模块化的出现也给框架的诞生提供了基础
模块化规范介绍
由于nodejs刚刚发布的时候,前端没有统一的、官方的模块化规范,因此,它选择使用社区提供的CommonJS作为模块化规范
在学习CommonJS之前,首先认识两个重要的概念:模块的导出和模块的导入
何为导出
要理解模块的导出,首先要理解模块的含义
什么是模块?
模块就是一个JS文件,它实现了一部分功能,并隐藏自己的内部实现,同时提供了一些接口供其他模块使用
模块有两个核心要素:隐藏和暴露
隐藏的,是自己内部的实现
暴露的,是希望外部使用的接口
任何一个正常的模块化标准,都应该默认隐藏模块中的所有实现,而通过一些语法或api调用来暴露接口
何为导入
当需要使用一个模块时,使用的是该模块暴露的部分(导出的部分),隐藏的部分是永远无法使用的。
当通过某种语法或api去使用一个模块时,这个过程叫做模块的导入