zoukankan      html  css  js  c++  java
  • 前端模块规范区别与应用

    前端模块规范有: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));
  • 相关阅读:
    Scrapy 扩展中间件: 针对特定响应状态码,使用代理重新请求
    Scrapy 扩展中间件: 同步/异步提交批量 item 到 MySQL
    Scrapy 隐含 bug: 强制关闭爬虫后从 requests.queue 读取的已保存 request 数量可能有误
    Scrapyd 改进第二步: Web Interface 添加 STOP 和 START 超链接, 一键调用 Scrapyd API
    简单示例理解神闭包
    ejs 模板使用方法
    我使用的开源组件汇总,以备学习使用
    了不起的Node.js--之五 TCP连接
    Windows7下Java运行时环境搭建
    了不起的Node.js--之四
  • 原文地址:https://www.cnblogs.com/xiaolanschool/p/10175343.html
Copyright © 2011-2022 走看看