zoukankan      html  css  js  c++  java
  • JS的各种模块化规范

    AMD CMD CommonJs UMD ES6 一路演进

    AMD

    • 异步模块定义规范(Asynchronous Module Definition),人如其名,是异步加载的
    • 是运行于浏览器之上的
    • 此规范只有一个 API,即 define 函数:define(id?, dependencies?, factory);
    • requireJs 就是它的实现
    • 示例:
    // moudle-a.js
    define('moudleA', function() { 
        return {
            a: 1
        }
    });
    
    // moudle-b.js
    define(['moudleA'], function(ma) {
        var b = ma.a + 2;
    
        return {
            b: b
        }
    });
    

    CMD

    • 通用模块定义规范(Common Module Definiton)
    • 更简单,异步加载脚本,兼容 Nodejs
    • 定义格式: define(factory);
    • SeaJS 是它的实现
    • 示例:
    // moudle-a.js
    define(function(require, exports, module) {
    
        module.exports = { 
            a: 1 
        };
    
    });
    
    // moudle-b.js
    define(function(require, exports, module) {
    
        var ma = require('./moudle-a');
        var b = ma.a + 2;
        module.exports = { 
            b: b 
        };
    });
    

    CommonJs

    • 通常用于服务端的 Nodejs 中
    • 每一个文件就是一个模块
    • module 代表当前模块,module.exports 是对外的接口; require 方法用于加载模块
    • 示例:
    //moudle-a.js
    moudle.exports = {
        a: 1
    };
    
    //moudle-b.js
    var ma = require('./moudle-a');
    var b = ma.a + 2;
    module.exports ={
        b: b
    };
    

    UMD

    • 通用模块定义规范(Universal Module Definition)
    • 它可以通过 运行时或者编译时 让同一个代码模块在使用 CommonJs、CMD 甚至是 AMD 的项目中运行
    • 它没有自己的专有规范,它是在定义模块的时候检测当前使用环境和模块的定义方式,将各种模块化定义方式转化为同样一种写法
    • 示例(组件库 xmh 的 webpack umd 导出为例):
    function(e, t) {
        "object" == typeof exports && "object" == typeof module 
        ? module.exports = t() 
        : "function" == typeof define && define.amd 
            ? define([], t) 
            : "object" == typeof exports 
                ? exports.xmh = t() 
                : e.xmh = t()
    } (window, (function() {
        // todo
    }))
    

    ES6 模块

    • ES6 终于从语言层面定义了模块化规范
    • import 加载模块,export 导出模块
    • 示例:
    //module-a.js
    export default {
        a: 1
    }
    
    //module-b.js
    import { a } from './module-a'
    export const b = a + 2
    
  • 相关阅读:
    kettle参数、变量详细讲解[转]
    C# 异步
    〖Python〗-- 模块与包
    〖Python〗-- 异常处理
    〖Python〗-- 面向对象进阶
    〖Python〗-- 反射、内置attr、包装
    〖Python〗-- property、静态方法、类方法
    〖Python〗-- 面向对象编程的继承、多态与多态性、封装
    〖Python〗-- 面向对象编程、继承、组合、接口和抽象类
    〖Python〗-- 递归、面向对象初识及编程思想
  • 原文地址:https://www.cnblogs.com/babywhale/p/13516855.html
Copyright © 2011-2022 走看看