什么是模块?
块的内部数据与实现是私有的,只是向外部暴露一些接口与外部其余模块通讯浏览器
采用 CommonJS 模块规范
在服务器端,模块的加载是运行时同步加载的,在浏览器端,模块须要提早编译打包处理。服务器
CommonJS。CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操做。babel
基本语法:异步
暴露模块:module.exports = value 或 exports.xxx = valueasync
引入模块:require(xxx),若是是第三方模块,xxx为模块名;若是是自定义模块,xxx为模块文件路径模块化
局限:不适用于浏览器环境,require操做是同步的。这对服务器端不是一个问题,由于全部的模块都存放在本地硬盘,能够同步加载完成,等待时间就是硬盘的读取时间。函数
可是,对于浏览器,这倒是一个大问题,由于模块都放在服务器端,等待时间取决于网速的快慢,可能要等很长时间,浏览器处于”假死”状态。ui
所以,浏览器端的模块,不能采用”同步加载”(synchronous),只能采用”异步加载”(asynchronous)spa
采用AMD规范
特色:非同步加载模块,容许指定回调函数设计
require.js。
CMD
特色:专门用于浏览器端,模块的加载是异步的,模块使用时才会加载执行
Sea.js
CMD与AMD区别
UMD
UMD是AMD和CommonJS的糅合。UMD先判断是否支持Node.js的模块(exports)是否存在,存在则使用Node.js模块模式。再判断是否支持AMD(define是否存在),存在则使用AMD方式加载模块。
ES6模块化
ES6 模块的设计思想是尽可能的静态化,使得编译时就能肯定模块的依赖关系,以及输入和输出的变量。CommonJS 和 AMD 模块,都只能在运行时肯定这些东西
ES6 Module默认目前尚未被浏览器支持,须要使用babel
导入:import
导出:export {<变量>},export default
ES6 在语言标准的层面上,实现了模块功能,并且实现得至关简单,彻底能够取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。