`
ch19880311
  • 浏览: 26582 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

AMD之require.js与CMD之sea.js

    博客分类:
  • JS
阅读更多

AMD和CMD规范 

AMD(Asynchronous Module Definition),CMD(Common Module Definition)都是JS模块化的规范。之所以有这2个规范是因为RequireJS和Sea.js这2个模块加载器,它们倡导模块化开发理念,核心价值是让 JavaScript 的模块化开发变得简单自然,所以才有了这2个规范的定义。

RequireJS 

官网 http://requirejs.org/
它推崇依赖前置,也就是依赖提前执行。这里所说的执行是可以理解为解析,而不是加载。
//并行加载所有require模块,并且解析放入回调方法参数中
require(['jquery','common'],function($,COMMON){
    // ...此处调用COMMON模块
    // ...此处调用jquery模块
});
 
附件AMD_Sample是一个使用require.js的例子。

Sea.js

官网 http://seajs.org/docs/
它提倡的模块化思想是按需执行模块,也可称为延迟执行。正如CMD所推崇的as lazy as possible. 如下示例代码:
 
//对于方法中所有定义的require模块,都会并行加载
define(function (require, exports, module) {
//当代码执行此处时才解析common模块
var COMMON = require('common');
// ...此处调用COMMON模块
//代码执行此处时才解析jquery模块
var $ = require('jquery');
// ...此处调用jquery模块
});
 
 
附件CMD_Sample是一个使用sea.js的例子。

总结:

SeaJS只会在真正需要使用(依赖)模块时才执行该模块。SeaJS是异步加载模块的没错, 但执行模块的顺序也是严格按照模块在代码中出现(require)的顺序。
而RequireJS会先尽早地执行(依赖)模块, 相当于所有的require都被提前了, 而且模块执行的顺序也不一定100%就是先jquery再common,除非common中定义时依赖了jquery。
这里需要注意的一点:执行模块可能会被很多人产生误解,以为是加载。 它的执行表示真正运行define中的代码, 而非加载(load文件)模块.模块的加载都是并行的, 没有区别, 区别在于执行模块的时机, 或者说是解析。
 

两者比较:

requireJS实现JS模块文件的异步加载,避免网页被堵塞,管理模块之间的依赖性,便于代码的编写和维护。当然 RequireJS 从 2.0 开始,也支持了CMD写法。你在回调方法体里直接用require('common')不会有任何问题。但是这不是作者所推崇的做法,也不是官方文档里默认的模块定义写法。
Sea.js动态解析,前端性能优化,但是require代码嵌入回调方法中不好的一点是,如果以后模块路径有修改,对应require代码也需要修改,则在一定程度上降低了代码的耦合度。

关于AMD和CMD对第三方插件的支持 

AMD:目前AMD规范格式已经被很多主流的js框架所接受,比如jquery已经在1.7版本开始支持AMD规范,我们在引入jquery模块之前就不需要对jquery代码进行修改或包装。当然如果有不支持AMD规范的第三方js,requireJS还提供了shim的配置选项,具体就不详细介绍,可以查看官方API。附件中AMD_shim就是采用shim对一个低版本的jquery和第三方插件ztree的支持。
CMD对于CMD规范格式的支持,则需要对第三方插件做一些必要的包装和修改。就拿jquery来说,可以用如下形式改写插件代码:
define(function(){ 
//...此处添加jquery源码
    return $.noConflict();
});
 
从附件CMD_Sample里就可以看到jquery是被改过的。
分享到:
评论

相关推荐

    模块化开发及AMD、CMD、Require.js、sea.js、common.js、ES6的对比

    模块化开发及AMD、CMD、Require.js、sea.js、common.js、ES6的对比;模块化开发就是封装细节,提供使用接口,彼此之间互不影响,每个模块都是实现某一特定的功能。模块化开发的基础就是函数

    Sea.js实战dome

    AMD推崇依赖前置,在定义模块的时候就要声明其依赖的模块 CMD推崇就近依赖,只有在用到某个模块的时候再去require

    在ASP.NET MVC项目中使用RequireJS库的用法示例

    RequireJS 是一个前端模块化开发的流行工具,本身是一个Javascript的库文件,即require.js 。...从模块化划分的规则来区分,主要分为AMD、CMD两类,dojo、require.js 遵从前者,而sea.js 依循CMD规范。 require

    JS模块化标准技术.JAVASCRIPT的几种模块化技术

    JS模块化标准技术.JAVASCRIPT的几种模块化技术 作为前端重要组成部分的javascript语言,其面向对象...所以要实现代码的模块化,需要一些标准:AMD,CMD 针对2种模块化也有现成的js模块化库SeaJs,require.js 今天来个教程

    Editor.md 是一款开源的、可嵌入的 Markdown 在线编辑器(组件),基于 CodeMirror、jQuer

    - 支持通用 Markdown / CommonMark 和 GFM (GitHub Flavored...- 支持 AMD / CMD 模块化加载(支持[Require.js& Sea.js),并且支持自定义扩展插件; - 兼容主流的浏览器(IE8+)和 Zepto.js,且支持 iPad 等平板设备;

    Encounter-Node.js:深入浅出Node.js

    CMD实现库sea.js ESModule的基本使用 CJS和ES的交互 Node常用内置模块 内置模块path 内置模块fs events模块 包管理工具详解 认识npm package.json常见属性 全局安装和局部安装 npm安装包的原理 package-lock.j

    Editor.md 是一款开源的、可嵌入的 Markdown 在线编辑器(组件)

    Editor.md 建立在众多优秀的开源组件基础...支持 AMD / CMD 模块化加载(支持 Require.js & Sea.js),并且支持自定义扩展插件; 兼容主流的浏览器(IE8+)和 Zepto.js,且支持 iPad 等平板设备; 支持自定义主题样式;

    Editor.md 是一款开源的、可嵌入的 Markdown 在线编辑器(组件)

    Editor.md 是一款开源的、可嵌入的 Markdown 在线编辑器(组件)...支持 AMD / CMD 模块化加载(支持 Require.js & Sea.js),并且支持自定义扩展插件;兼容主流的浏览器(IE8+)和 Zepto.js,且支持 iPad 等平板设备;

    使用mini-define实现前端代码的模块化管理

    如果你不想花时间学习require.js,也不想翻看长篇的cmd/amd规范,那么这个mini-define就是你不错的选择。如果你之前用过sea.js或require.js那么mini-define更加高效,更加轻量,更加易用。项目地址:github 用法 首先...

    程序员面试刷题的书哪个好-outline:大纲

    sea.js ES Module ES6 开启http服务器 安装第三方模块 npm install 知识点 开启http服务器 http fs url path mime类型 全局变量 __dirname: 当前文件所在目录 D:\class\gzh2008\w1_NodeJS\img __filename: 当前文件...

    程序员面试刷题的书哪个好-antony:安东尼

    sea.js ES Module ES6 开启http服务器 安装第三方模块 npm install 知识点 开启http服务器 http fs url path mime类型 全局变量 __dirname: 当前文件所在目录 D:\class\gzh2008\w1_NodeJS\img __filename: 当前文件...

    hyperblog:Un blog para el curso de git y github

    超级博客 Un Blog para curso de git y github 托尼·克雷阿多 特征 支持标准Markdown / CommonMark和GFM(GitHub Flavored ... 支持AMD / CMD(Require.js&Sea.js)模块加载器,以及自定义/定义编辑器插件; 编辑器

    hyperblog:Platzi的Git和Github课程的精彩博客

    超级博客Archivo proyecto platzi Jimmy es el creador Realizar practicas强调斜体支持标准Markdown / CommonMark和GFM(GitHub Flavored Markdown);... 支持AMD / CMD(Require.js&Sea.js)模块加载程序,

    mdeditor:开源在线降价编辑器(组件)

    编辑器.md Editor.md :开源的可嵌入在线降价编辑器(组件),基于 CodeMirror...Require.js & Sea.js) 模块加载器,以及自定义/定义编辑器插件; 自述文件和示例(英文) Editor.md是虚拟开源的、可嵌入的Markd

    Editor.md Markdown编辑器-其他

    Editor.md是一个可嵌入的开源Markdown在线编辑器组件,...6、支持 AMD / CMD 模块化加载(支持 Require.js & Sea.js),并且支持自定义扩展插件; 7、兼容主流的浏览器(IE8+)和Zepto.js,且支持iPad等平板设备;

    blog_git_github:该存储库用于说明如何在git和github中创建存储库

    支持AMD / CMD(Require.js&Sea.js)模块加载器,以及自定义/定义编辑器插件;博客网站Bitacora 目录[TOCM] [目录]什么是版本控制系统?为什么是git?Git安装使用终端的基本命令工作区域及其周期创建我们的第一个...

    一个MarkDown编辑器,基于Editor.md-易语言

    支持 AMD / CMD 模块化加载(支持 Require.js Sea.js),并且支持自定义扩展插件; 兼容主流的浏览器(IE8+)和Zepto.js,且支持iPad等平板设备; 支持自定义主题样式;Editor.md 的诞生依赖于以下开源项目:>...

Global site tag (gtag.js) - Google Analytics