• 前端模块规范区别与应用


    前端模块规范有:AMD,CMD,CommonJs,UMD

    一.总览

    1.浏览器端

    • AMD是requireJs在推广过程中对模块定义的规范(异步模块规范)
    • CMD是seaJs在推广过程中对模块定义的规范(普通模块规范)

    2.node端

    •     commonJs(同步模块规范)

    3.浏览器和node兼容端

    • UMD(通用模块规范)

    4.ES6内置模块化module

      import引入一个模块

      export [default] 对外暴露一个对象

    二.应用

    1.AMD

    提前执行(异步加载:依赖先执行)--依赖前置

    提供define(定义模块)和require(调用模块)方法来进行模块化编程

       define(id?,dependencies?,factory);

    require([module], callback);
    //Utils模块
    define(function(){
     function Utils(name) {
             this._name = name;
      }
     Utils.add = function(a, b) {
           return a + b;
      }
     return Utils;
    })
    
    //加载和使用
    // 配置各个模块地址
    require.config({
      paths: {
         "Utils": "./js/lib/Utils"
      },
    shim: {}     });
    //加载指定模块 require(["Utils"], function(Utils) { });

    2.CMD 

    延迟执行(按需加载)--依赖就近

    在 CMD 规范中,一个模块就是一个文件

    define(factory);  //factory可以是个函数,也可以是个对象或字符串
    define(id?, deps?, factory) //字符串id-模块标识,数组deps-依赖模块(
    define(function(require, exports){
    //require(id) 接受 模块标识 作为唯一参数
      var a = require('./a');
      a.doSomething()
    //require.async(id, callback?) 方法用来在模块内部异步加载模块,并支持指定回调 require.async('./b', function(b) { b.doSomething(); });
    //加载多个模块 require.async([
    './c', './d'], function(c, d) { c.doSomething(); d.doSomething(); });
    //require.resolve(id)模块系统内部的路径解析机制来解析并返回模块路径 console.log(require.resolve('./b'));
    // 对外提供 foo 属性 exports.foo = 'bar'; // 对外提供 doSomething 方法 exports.doSomething = function() {}; //return 直接向外提供接口 return { foo: 'bar', doSomething: function() {} };
    //exports 仅仅是 module.exports 的一个引用,并不会改变 module.exports 的值。因此给 exports 赋值是无效的,不能用来更改模块接口 module.exports
    = { foo: 'bar', doSomething: function() {} }; })

    3.commonJs

    加载模块是同步的,只有加载完成后才能执行后面的操作

    模块分为:

    (1)模块引用(require)

    (2)模块定义(exports)

    (3)模块标识(module)

    //模块
    function Utils(name) {
         this._name = name;
    }
    Utils.add = function(a, b) {
       return a + b;
    }
    // 将类 Utils 作为当前文件的模块导出
    module.exports = Utils;
    
    //加载模块
    var Utils = require('./Utils.js');
    console.log(Utils.add(10, 20));
  • 相关阅读:
    2020软件工程作业 4
    2020软件工程作业 3
    2020软件工程作业 2
    2020软件工程作业 1
    2020软件工程最后一次作业
    2020软件工程第四次作业
    2020软件工程第三次作业
    2020软件工程第二次作业
    2020软件工程第一次作业
    结对第二次作业
  • 原文地址:https://www.cnblogs.com/xiaolanschool/p/10175343.html
Copyright © 2020-2023  润新知