zoukankan      html  css  js  c++  java
  • AMD、CMD和CommonJS规范(转)

    CommonJS规范

     CommonJS是在浏览器环境之外构建JavaScript生态系统为目标产生的项目,比如服务器和桌面环境中。CommonJS规范是为了解决JavaScript的作用域问题而定义的模块形式,
    可以使每个模块在它自身的命名空间中执行。该规范的主要内容是:模块必须通过  module.exports导出对外的变量或接口,通过require()来导入其他模块的输出到当前模块。
    例子:
    //  moduleA.js  
    module.exports = function( value ){  
        return value * 2;  
    }  
    

     

    // moduleB.js  
    var multiplyBy2 = require('./moduleA');  
    var result = multiplyBy2(4); 
    

      CommonJS是同步加载模块,但其实也有浏览器端的实现,其原理是将所有模块都定义好并通过id进行索引,这样就可以浏览器进行解析了

     服务器端的Node.js遵循CommonJS规范。核心思想是允许模块通过require 方法来同步加载所要依赖的其他模块,然后通过 exports或module.exports来导出需要暴露的接口

    require("module");  
    require("../file.js");  
    exports.doStuff = function() {};  
    module.exports = someValue;
    

      

    优点:
     
    •  服务器端便于重用
    • NPM中已经将近20w个模块包
    • 简单并容易使用
    缺点:
    • 同步的模块方式不适合不适合在浏览器环境中,同步意味着阻塞加载,浏览器资源是异步加载的
    • 不能非阻塞的并行加载多个模块

    AMD

    AMD规范其实只有一个主要接口 define(id,dependencies,factory),它要在声明模块的时候指定所有的依赖dependencies,并且还要当做形参传到factory中,对于依赖的模块提前执行,依赖前置
    define("module", ["dep1", "dep2"], function(d1, d2) {  
      return someExportedValue;  
    });  
    require(["module", "../file"], function(module, file) { /* ... */ });  
    

      

    优点:
    • 适合在浏览器环境异步加载
    • 并行加载多个模块
    缺点:
    • 提高开发成本,代码阅读和书写比较困难
    • 不符合通用的模块思维方式,是一种妥协的实现

    CMD

    CMD规范和AMD相似,尽量保持简单,并且与CommonJS和NodeJS的Modules规范保持了很大的兼容性。

    define(function(require, exports, module) {  
      var $ = require('jquery');  
      var Spinning = require('./spinning');  
      exports.doSomething = ...  
      module.exports = ...  
    })  
    

      

    优点:
     
    • 依赖就近,延迟执行
    • 很容易在node中运行
    缺点:
    • 依赖SPM打包,模块的加载逻辑偏重
    实现: SeaJS

    转自 https://blog.csdn.net/vuturn/article/details/51970567

  • 相关阅读:
    linux服务器时间同步
    07_DICTIONARY_ACCESSIBILITY
    Oracle监听静态注册和动态注册
    Oracle安装基本步骤
    笔试面试(2)阿里巴巴2014秋季校园招聘-软件研发工程师笔试题详解
    Global and Local Coordinate Systems
    齐次坐标(Homogeneous Coordinates)
    朴素贝叶斯分类器的应用
    图像数据到网格数据-1——MarchingCubes算法
    PCL源码剖析之MarchingCubes算法
  • 原文地址:https://www.cnblogs.com/jiuyi/p/9181259.html
Copyright © 2011-2022 走看看