前端杂货铺Web前端之路饥人谷技术博客

前端模块化

2017-03-17  本文已影响67人  IT男的成长记录

1.模块与模块化开发

2.CommonJS

//模块定义 myModel.js

var name = 'Byron';

function printName(){
    console.log(name);
}

function printFullName(firstName){
    console.log(firstName + name);
}

module.exports = {
    printName: printName,
    printFullName: printFullName
}
//加载模块

var nameModule = require('./myModel.js');

nameModule.printName();

3.AMD

使用
define(id?, dependencies?, factory);
  1. id:可选参数,用来定义模块的标识,如果没有提供该参数,默认为该模块对应的脚本文件名(去掉拓展名)
  2. dependencies:是一个当前模块依赖的模块名称数组
  3. factory:工厂方法,模块初始化要执行的函数或对象。如果为函数,它应该只被执行一次。如果是对象,此对象应该为模块的输出值
require([module], callback);

1.[module],是一个数组,指定了要加载的模块
2.callback,是加载成功之后的回调函数

require(['math'], function (math) {
  math.add(2, 3);
});
console.log('hello world');

console.log()的执行和模块的加载是异步的,不会因为等待模块的加载而使浏览器“假死”

4.CMD

使用
define(id?, dependencies?, factory);
  1. id:可选(推荐不写,默认为文件名),用来定义模块的标识,通常用文件名作为模块id
  2. dependencies:可选(推荐不写),是一个当前模块依赖的模块名称数组(因为CMD推崇依赖就近,因此一般不在此处指定)
  3. factory:
    • function(require, exports, module)
    • require(id):require 是一个方法,接受模块标识作为唯一参数,用来获取其他模块提供的接口
    • exports 是一个对象,用来向外提供模块接口
    • module 是一个对象,上面存储了与当前模块相关联的一些属性和方法
seajs.use([module], callback);

1.[module],是一个数组,指定了要加载的模块
2.callback,是加载成功之后的回调函数

seajs.use(['./a', './b'], function(a, b) {
  a.doSomething();
  b.doSomething();
});

AMD和CMD

r.js

尽管RequireJS和SeaJS解决了模块化开发遇到的问题,但是又出现了新的问题:一个单独的文件就是一个模块,如果网页功能复杂,大量的模块意味着大量的请求,这不仅会增加服务器的压力,而且会影响用户体验(完全加载时间变长).为了解决这个问题,需要使用 r.js 来对模块进行打包和压缩,这能有效减少请求和j文件大小.

练习

项目地址
预览地址
(点击加载需要后端支持,因此预览效果无法实现)

上一篇 下一篇

猜你喜欢

热点阅读