模块化发展历程
- 一个模块单独抽离成一个文件,(缺点: 命名冲突,全靠约定)
- 命名空间的方式,导出一个对象(确定:命名冲突还是存在,可在外部修改,没解决依赖关系的问题)
- 立执行函数(闭包,只能在将对象挂载到全局,通过传参解决依赖问题。jQuery就是基于这种方式实现)
这三种是早起没有工具和规范的时候的解决方式
AMD
AMD规范,requirejs的规范 (异步的模块定义规范)
CommomJS
node 使用的CommomJS规范 是以同步的方式加载文件
CMD 规范
在JavaScript中,CMD代码规范是指模块定义规范,它是Asynchronous Module Definition的缩写,即异步模块定义。CMD规范主要用于sea.js这种模块加载器。
现在使用的ES Modules + node下使用CommonJS
ES Modules 在html中的使用
ES Modules 导入导出
export const PI = '3.14';
export default {
a: 123
}
import obj, { PI } from './index'
统一导出时可以使用便捷写法
export { default as Button, PI } from './index'
polyfill
让旧版浏览器兼容ES Modules的写法。ie中可能还不兼容promise,单独处理一下