【自己的理解,可能有错】
- 因为js只有全局作用域和函数作用域,没有块级作用域。我们需要块级作用域,可以实现模块化构建,但是其复杂程度太难,实现方式千差万别,so提出新一种新的方式去实现模块化构建代码组织代码;
- 因为需要模块化,so出现CommonJS AMD CMD规范(代码格式语法)去优化js代码;
- so 出现相对应的node.js require.js sea.js的工具库( ****实现的 module loader,用来管理 JavaScript 代码的依赖关系***)( 是一种在线"编译" 模块的方案,相当于在页面上加载一个 CMD/AMD 解释器。这样浏览器就认识了 define、exports、module 这些东西。也就实现了模块化。)
- 出现这些工具库,因为前端工作变得繁复杂乱,需要自动化来构建(编译 SCSS、优化 Require.js 、打包项目、上传 FTP、部署 CDN、替换文本),gulp和grunt自动化构建工具)
- 因为ES6的模块化出现,原生JS模块化出现,解决了之前AMD CMD的缺陷问题(因为有很多插件是不支持AMD CMD;需要大量引用第三方插件是不提倡使用requirejs和seajs);so ES6是趋势.
- 但是ES6目前市场上很多浏览器不支持,IE毒瘤的存在,so要实现兼容和自动化构建,so出现browserify / webpack : 是一个预编译模块的方案,相比于上面 ,这个方案更加智能。没用过browserify,这里以webpack为例。首先,它是预编译的,不需要在浏览器中加载解释器。另外,你在本地直接写JS,不管是 AMD / CMD / ES6 风格的模块化,它都能认识,并且编译成浏览器认识的JS。
webpack can be seen as file bundle. css img json xml....can 模块化打包。 - 目前还是requirejs还是占据一定市场份额。