`
ch19880311
  • 浏览: 27494 次
  • 性别: 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

    在实际项目中,Sea.js 提供了两种模块定义方式:AMD(Asynchronous Module Definition)和 CMD(Common Module Definition),这两种模式对于组织和管理大型JavaScript代码库至关重要。 **AMD 模式** AMD 强调的是...

    sea.js demo 简单实例教程

    Sea.js 是一个遵循 CMD(Common Module Definition)规范的 JavaScript 模块加载器,它旨在为浏览器环境提供模块化的解决方案。CMD 规范与 Node.js 中的 CommonJS 规范类似,但做了针对浏览器的优化。Sea.js 提供了...

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

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

    Sea.JS知识总结

    Sea.js遵循CMD(Common Module Definition)规范,这一规范主要由玉伯提出,与AMD(Asynchronous Module Definition)规范相比,它更符合自然语言的书写习惯。Sea.js允许开发者像编写Node.js模块一样编写浏览器端的...

    seajs 使用文档

    与 AMD(Asynchronous Module Definition)规范相比,CMD 规范更加简洁,且与 CommonJS 和 Node.js 的 Modules 规范具有很高的兼容性。 #### CMD模块定义规范 CMD 模块定义规范是 Sea.js 的核心之一,用于定义模块...

    JS中的模块规范(CommonJS,AMD,CMD

    ### JS中的模块规范(CommonJS, AMD, CMD) #### 一、CommonJS CommonJS 是一种模块化标准,最初被设计用于服务器端JavaScript环境,特别是针对Node.js这样的平台。CommonJS 的核心理念是允许开发者将代码组织成独立...

    JS中的模块规范(CommonJS,AMD,CMD(少用))

    **CMD** 规范是由国内的前端框架Sea.js提出的,其设计思路与AMD类似,但更加注重模块间的依赖顺序。在CMD中,模块可以按需加载,而且允许模块的动态加载。 CMD规范的主要特点包括: - CMD同样使用`define()`函数...

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

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

    JavaScript的模块化开发框架Sea.js上手指南

    CMD(Common Module Definition)是一种模块定义规范,与AMD(Asynchronous Module Definition)类似,但是CMD更加适合于Node.js环境,并且在浏览器端也可以使用Sea.js这样的实现库。Sea.js追求的是简洁、高效、易用...

    Angular JS RequireJS

    CMD(Common Module Definition)是Sea.js 提出的一种模块定义规范,与AMD类似,但CMD更注重同步执行和延迟加载,更适合于Node.js环境。尽管CMD和Angular JS、RequireJS不是同一生态系统,但在某些场景下,可以将...

    vue文件经过编译使其满足AMDCMD的模式

    当Vue.js项目需要与AMD或CMD规范配合时,例如在一个已经采用RequireJS或Sea.js的大型项目中,Vue文件需要经过特定的编译过程才能适配这两种模块化系统。这个过程通常涉及预处理器或者构建工具,如Webpack、Rollup或...

    mod.js:requirejs的amd模式有时候会产生很多request请求,这里自己写一个mod.js作为cmd模式的模块化时使用。cmd的模块化很多时候需要依赖编译脚本,进行代码合并

    AMD(Asynchronous Module Definition)和CMD(Common Module Definition)是两种流行的JavaScript模块化规范,它们分别由RequireJS和Sea.js等库支持。 标题中的“mod.js”是一个自定义实现的CMD模式的模块化解决...

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

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

    Seajs是什么及sea.js 由来,特点以及优势

    1. 遵循CMD规范:Sea.js基于Common Module Definition规范,这是一个通用模块定义的规范,它与RequireJS推广的AMD(Asynchronous Module Definition)规范不同,主要区别在于AMD推荐依赖前置,而CMD推崇就近依赖,即...

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

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

    seajs-2.1.1.rar

    四、Seajs与AMD/CMD的区别 AMD(Asynchronous Module Definition)和CMD是两种JavaScript模块化的实现方式,RequireJS是AMD的代表,而Seajs遵循CMD。两者主要区别在于: - AMD强调异步加载,依赖前置;CMD则支持...

Global site tag (gtag.js) - Google Analytics