一、模块化分类
- require.js AMD 前端的模块化规范
- sea.js CMD 前端的模块化规范
- common.js 后端的模块化规范 node里面可以用
- es6模块化规范
二、模块化方案的好处
- 解决了多个文件之间的依赖的问题
- 解决了多个文件之间的命名冲突的问题
三、AMD模块化方案
3-1 引入模块
require([dependencies],function(){});
- 第一个参数是一个数组,表示所依赖的模块
- 第二个参数是一个回调函数,当前面指定的模块都加载成功后,它将被调用.加载的模块会以参数形式传入该函数,从而在回调函数内部就可以使用这些模块
3-2 定义模块
define(id?,dependencies?,factory);
- id: 定义中模块的名字;可选;如果没有提供该参数,模块的名字应该默认为模块加载器请求的指定脚本的名字.
- 依赖dependencies:是一个当前模块依赖的,已被模块定义的模块标识的数组字面量
- 工厂方法factory,模块初始化要执行的函数或对象.如果为函数,它应该只被执行一次.如果是对象,此对象应该为模块的输出值.
- 默认情况下文件名即为模块名
四、CMD模块化方案
4-1 声明模块
define(id?,d?,factory)
- id : 因为CMD推崇一个文件一个模块,所以经常就用文件名作为模块id
- d : CMD推崇依赖就近,所以一般不在define的参数中写依赖
- factory :函数 function(require,exports,module)
require 是一个方法,用来获取其他模块提供的接口
exports 是一个对象,用来向外提供模块接口
module 是一个对象,上面存储了与当前模块相关联的一些属性和方法
4-2 使用模块
seajs.use(‘mymodel.js’,function(mymodel){
});
五、AMD和CMD的区别
- CMD 推崇依赖就近;AMD 推崇依赖前置
- CMD 是延迟执行,懒加载;AMD 是提前执行
- CMD性能好,因为只有用户需要的时候才执行;AMD用户体验好,因为没有延迟,依赖模块提前执行了
六、COMMONJS模块化规范
6-1 模块的引入
const modu = require(‘./b.js’)
6-2 模块的导出
导出单个成员
exports.foo = “变量”
exports.add = function(){}
导出多个成员
module.exports = {
}
七、ES6模块化方案
- 导出单个成员
```javascript
export let name = ‘leo’;
export let age= 30;
//import {name,age} from ‘./a.js’
- 导出多个成员
```javascript
let name2= 'leo2';
let age2= 33;
export {name2, age2};
//import {name2,age2} from './a.js'
- 导出默认成员
let kk2 = "abc"
export default kk2;
//import kk2 from './a.js'