amd和cmd区别

摘要:
对于依赖模块,AMD提前执行,CMD延迟执行//CMDdefine//AMD建议默认需要配置;高于requirejs==要求///要求;上面的requirejs==requirement==定义是一个依赖项。海Js专注于Web浏览器端,可以通过Node扩展轻松地在Node环境中运行。海js更接近CommonJSModules/1.1和NodeModules规范。RequireJS正在尝试让第三方类库自行修改以支持RequireJS。目前,只有少数社区采用了它。海Js非常注重代码开发和调试。有nocache、debug和其他用于调试的插件。RequireJS在这方面没有明显的支持。海js采用了通用的事件机制,具有更多的插件类型。

AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。

CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。

对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。

不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。

CMD 推崇 as lazy as possible.

CMD 推崇依赖就近,AMD 推崇依赖前置。

// CMD
define(function(require, exports, module) {
var a = require('./a')
a.doSomething()
// 此处略去 100 行
var b = require('./b') // 依赖可以就近书写
b.doSomething()
// ... 
})

// AMD 默认推荐的是

require.config({
  paths: {
    'jquery': '../vendor/jquery-1.12.0.min',
    'jquery-ui':'../assets/js/jquery-ui.min',
    'd3': "../vendor/d3.v3",
    // 'dagre-d3': "../vendor/dagre-d3",
    'dagre-d3': "../assets/compress/dagre-d3.min",
    'interact': "../vendor/interact.min",
    'mousetrap': "../vendor/mousetrap.min",
    'sinbad': '../sinbad/js/sinbad.min',
    'bootstrap':'../assets/js/bootstrap',
    'ace':'../assets/js/ace', //ace框架
    //'aceCode':'../vendor/editor/ace', //ace代码插件
    'aceCode':'../assets/compress/ace-code.min',
    'aceElements':'../assets/js/ace-elements',
    'slimscroll':'../vendor/transparent-dark/lib/slimScroll/jquery.slimscroll.min', //light blue scroll插件
    'modify':'../statics/flow/modify',
  },
  shim: {
    'jquery-ui': {
      deps: ['jquery']
    },
    'bootstrap': {
      deps: ['jquery'],
      exports: 'bootstrap'
    },
    'editor': {
      deps: ['aceCode']
    }
  }
});
上面requirejs === require
///
require([
  'd3',
  'property',
  'sinbad',
  'editor',
  'jquery-ui',
  'bootstrap',
  'modify',
  'aceCode',
  'link-rules',
], function (d3, property, sinbad,editor, scroll) {
  console.log(1)
  require('jquery-ui');
});
上面requirejs === require === define

shim,是依赖,{deps:"xxx"}


define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好
a.doSomething()
b.doSomething()
})

AMD 的 API 默认是一个当多个用,CMD 的 API 严格区分,推崇职责单一。比如 AMD 里,require 分全局 require 和局部 require,都叫 require。

CMD 里,没有全局 require,而是根据模块系统的完备性,提供 seajs.use 来实现模块系统的加载启动。CMD 里,每个 API 都简单纯粹。

  1. 定位有差异。RequireJS 想成为浏览器端的模块加载器,同时也想成为 Rhino / Node 等环境的模块加载器。Sea.js 则专注于 Web 浏览器端,同时通过 Node 扩展的方式可以很方便跑在 Node 环境中。
  2. 遵循的规范不同。RequireJS 遵循 AMD(异步模块定义)规范,Sea.js 遵循 CMD (通用模块定义)规范。规范的不同,导致了两者 API 不同。Sea.js 更贴近 CommonJS Modules/1.1 和 Node Modules 规范。
  3. 推广理念有差异。RequireJS 在尝试让第三方类库修改自身来支持 RequireJS,目前只有少数社区采纳。Sea.js 不强推,采用自主封装的方式来“海纳百川”,目前已有较成熟的封装策略。
  4. 对开发调试的支持有差异。Sea.js 非常关注代码的开发调试,有 nocache、debug 等用于调试的插件。RequireJS 无这方面的明显支持。
  5. 插件机制不同。RequireJS 采取的是在源码中预留接口的形式,插件类型比较单一。Sea.js 采取的是通用事件机制,插件类型更丰富。

免责声明:文章转载自《amd和cmd区别》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Windows下重叠I/O模型C/C++调用Golang 一下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

nodejs package.json中的exports

test/package.json { "name": "test", "main": "index.js", "exports": { ".": { "require": "./index.js" }, "./a": "./functions/a.js", "./b": "./functions/b...

单项目实现vendor分离编译,增加编译效率(vue-cli)

1、在build文件夹下添加文件:webpack.dll.config.js const path = require('path') const webpack = require('webpack') const package = require('../package.json') const AssetsPlugin = require('ass...

前端利器躬行记(7)——自制脚手架

在学习了Webpack基础后,查看别人写好的脚手架总是会一头雾水,后面就上网查各种资料,一边参考一边修改,整出了一套简易的脚手架(已上传至GiuHub和npm上),借鉴了Create React App(CRA)的目录结构(如下所示),并做成了命令行工具(已上传至GiuHub和npm上)。 ├── pwu -------------------------...

Emacs 安装配置使用教程

Emacs 安装配置使用教程 来源 https://www.jianshu.com/u/a27b97f900f7 序|Preface 先来一篇有趣的简介:Emacs和Vim:神的编辑器和编辑器之神 - 51CTO.COM 为何写这篇教程? 作为一个彻头彻尾的emacs新手,尽管有些薄弱的编程经验,但上手这么一个黑客级别的编辑器还是难免一段阵痛期。虽然网...

Nodejs的模块化

1. Node.js中的模块化简介 为什么Node.js中需要模块化 在后台开发语言中,比如Java、C#。他们都是隐含模块化的,Node.js默认帮我们提供了模块化这种机制。 在服务器端,我们想要使用底层的一些功能需要导入一些“包”来对其操作,比如操作文件、网络需要导入对应的包。其它语言中都是基于类来实现的模块化的思想,使用类来组织文件和文件之...

让Apache支持URL重写

第一步: 添加.htaccess文件 Rewrite 规则 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^...