美文网首页
AMD_CMD_RequireJS

AMD_CMD_RequireJS

作者: GaoYangTongXue丶 | 来源:发表于2017-04-24 19:39 被阅读31次

    题目1: 为什么要使用模块化?

    1. web应用越来越复杂,代码复杂度增加
    2. 代码需要复用和解耦合
    3. 性能优化,需要更少的http请求。
      模块化能够解决命名冲突、文件依赖管理的问题,并且能够提供代码的复用性

    题目2: CMD、AMD、CommonJS 规范分别指什么?有哪些应用

    前端的模块化首先是在服务器端出现的。CommonJS规范是在nodeJS的发展中发展起来的。由于Node.js环境有四个变量module,exports,require,global
    所以它能提供一种简单方式进行模块的输出与引入.在node环境下打印出module
    和exports
    结果如下

    Module { id: '.', exports: {}, parent: null, filename: 'E:\\jirengu\\模块化\\AMD-requireJS\\app.js', loaded: false, children: [], paths: [ 'E:\\jirengu\\模块化\\AMD-requireJS\\node_modules', 'E:\\jirengu\\模块化\\node_modules', 'E:\\jirengu\\node_modules' ] }{}
    

    但是在浏览器中就没有以上变量。接下来看看Commonjs如何的定义模块和引入模块定义模块

    //main.js
    function add(num){ return num + 3}
    module.exports = {add:add}
    

    引入模块

    //app.jsvar 
    add = require('math');
    console.log(add(2));
    

    require的引入逻辑有很多种,具体的实现方法可以参考阮一峰老师的文章不难发现这是require引入的方式是同步的,在服务器端没问题,但是在浏览器端可能会造成长时间的卡顿,并且浏览器端引入代码是通过动态插入script标签的方式,而动态插入的script标签默认是async异步特性,所以不能保证各加载文件的执行顺序。所以在浏览器端出现了AMD/CMD规范。
    AMD(异步模块定义),它采用一种回调的方式进行依赖加载,即先加载模块再执行代码。最典型的就是requireJS。定义和加载模块-语法define('ID',[dependencies],factory function)

    CMD规范由来源于玉伯开发的Sea.js,一个文件便是一个模块。定义模块语法:

    define(function(require,exports,module) {   exports.methodOne = function(){ //暴露methodOne方法 } module.id = 'methodOne'})
    

    加载模块

    define(function(require,exports) { 
    //需要时
    require var log = require('methodOne')
    ;})
    

    AMD与CMD的差别是:AMD是首先加载所有模块,再执行,而CMD是按需加载。如今requireJS和seaJS都已经是过去时,webpack和Browserify成为主流

    3.使用 requirejs 完善入门任务15,包括如下功能:

    1. 首屏大图为全屏轮播
    2. 有回到顶部功能
    3. 图片区使用瀑布流布局(图片高度不一),下部有加载更多按钮,点击加载更多会加载更多数据(数据在后端 mock)
    4. 使用 r.js 打包应用
      代码
      预览地址

    相关文章

      网友评论

          本文标题: AMD_CMD_RequireJS

          本文链接:https://www.haomeiwen.com/subject/wcvyzttx.html