`
zhangyaochun
  • 浏览: 2596005 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

模块化之CMD

CMD 
阅读更多

前面介绍了一下AMD相关的东西,这篇我们来看看CMD相关的。

 

CMD  -------  Common Module Definition

 

 在CMD规范里面,一个模块就是一个Javascript文件。代码书写格式如下:

 

 

define(factory);

 

  • define是全局函数,来定义模块
  • 仅接收一个factory参数,可以是函数,对象,字符串等类型
       1、factory为对象、字符串等非函数类型时候,表示模块的接口是该对象、字符串等值

define({
    "foo":"bar"
});
 
       通过字符串定义模版模块

define('I am a template.My name is {{name}}.');
 
      2、factory为函数时候,表示模块的构造方法

           执行该方法,可以得到模块向外提供的接口。默认3个参数:require 、 exports 、 module

define(function(require,exports,module){
    //...
});
 

     require

       ---------  是一个方法,用来获取其他模块提供的接口

define(function(require){
     var a = require('./a');
     a.doSomething;
});
 
   require接受模块标识作为唯一参数,模块标识书写需要遵循一些规范


    require.async
 
     ---------- 可以用来异步加载模块,并在加载完成后执行指定的回调

   
define(function(require,exports,module){
     //异步加载b  
     require.async('./b',function(b){
          b.doSomething;
    });

    //异步加载多个模块
    require.async(['./c','./d'],function(c,d){
         //
         ........
    })

});
  

    require.resolve
    
    ---------  使用模块系统内部的路径解析机制来返回模块的路径。该函数不会加载模块,只返回解析后的绝对路径

define(function(require,exports){
     console.log(require.resolve('./b'));
     //../b.js
});
 
   
   require.cache

    ----------  可以查看模块系统加载过的所有模块

     某些情况下,需要重新加载某个模块,可以得到该模块的url,然后通过delete require.cache[url] 来将其信息删除


   exports

    --------  是一个对象,用来向外提供模块接口

  
define(function(require,exports){
      exports.foo = "bar";
      exports.doSomething = function(){
          ...............
      }
});
 

     除了给exports对象增加成员,还可以以return的方式直接向外提供接口

define(function(require,exports,module){
      return {
          fool: "bar",
          doSomething:function(){
               .............
          }
     };
});
 
    当然如果只是返回一个对象,可以直接:

define({
     foo: "bar",
     doSomething:function(){}
});
 
   注释:在factory里面给exports重新赋值是没有意义的,因为exports仅仅是module.exports的一个引用,直接给exports重新赋值并不会修改module.exports的值。

  看下面这个错误的例子

  
define(function(require,exports,module){
      exports = {
           foo: "bar",
           doSomething:function(){}
      }
});

 

  正确的应该是:

 

 

define(function(require,exports,module){
     module.exports = {
            foo: "bar",
           doSomething:function(){}
     }
});

 

 

   module

 

   module 是一个对象存储了与当前模块关联的一些属性和方法

 

 

  •   module.id

           ----------  模块标识

 

define(function(require,exports,module){
    console.log(require(module.id) === exports);    // true
});

 

 

  • module.uri
         ------------ 根据模块系统的路径解析规则得到的模块绝对路径

  • module.dependencies
         ------------ 是一个数组,标识当前模块的依赖列表

  • module.parent
         ------------ 指向初始化调用当前模块的模块。可以得到模块初始化的callstack

  • module.factory
         ------------ 指向define(factory)中的factory参数

         ------------ 当前模块的状态,是一个数值

  • module.exports
         ------------ 当前模块对外提供的接口


    传给factory构造方法的exports参数是module.exports对象的一个引用

    比如当模块的接口是某一个类的实例时候,需要通过module.exports来实现
        
define(function(require,exports,module){
     console.log(module.exports === exports);   // true
     module.exports = new SomeClass();
     console.log(module.exports === exports);  //false
});
  

  • module.require
     在module环境中运行require,一般用于插件开发


   扩展阅读:

分享到:
评论
2 楼 zhangyaochun 2012-12-04  
key232323 写道
    当然如果只是返回一个对象,可以直接:

Js代码 
define(function(){ 
     foo: "bar", 
     doSomething:function(){} 
}); 

这个代码是不是语法错误?

应该是
define(function(){ 
  return {
     foo: "bar", 
     doSomething:function(){}
  };
}); 

吧?



恩,笔误了,其实就是定义一个对象

define({ 
     foo: "bar", 
     doSomething:function(){} 
});
1 楼 key232323 2012-11-20  
    当然如果只是返回一个对象,可以直接:

Js代码 
define(function(){ 
     foo: "bar", 
     doSomething:function(){} 
}); 

这个代码是不是语法错误?

应该是
define(function(){ 
  return {
     foo: "bar", 
     doSomething:function(){}
  };
}); 

吧?

相关推荐

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

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

    chengzhong1#Web#JavaScript模块化:CMD1

    引入模块的方式SeaJS的使用举例(自定义模块)1、创建项目结构在工程文件中新建如下目录:| modules2、下载SeaJS,并导入官网: https://s

    浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结.docx

    ### 浅析AMD、CMD与CommonJS规范——JavaScript模块化加载学习心得总结 #### 一、引言 在现代Web开发中,随着项目规模的不断扩大和技术复杂度的提高,JavaScript模块化成为了一种非常重要的编程实践。通过将复杂的...

    Neuerliu#Web_guide#JavaScript模块化:CMD1

    引入模块的方式SeaJS的使用举例(自定义模块)1、创建项目结构在工程文件中新建如下目录:| modules2、下载SeaJS,并导入官网: https://s

    JavaScript模块化开发库之SeaJS

    JavaScript模块化开发库之SeaJS 在Web开发中,JavaScript代码的组织和管理是一个重要的问题。随着项目的复杂性增加,代码的模块化变得至关重要。SeaJS便是一个专注于JavaScript模块化开发的库,它提供了一种在...

    将一些js库改写成符合cmd规范的模块

    CMD(Common Module Definition)是一种流行于国内的模块化规范,主要由Sea.js 推动。本话题将深入探讨如何将现有的JavaScript库改写为符合CMD规范的模块,以便更好地在项目中利用和管理这些库。 CMD规范的核心思想...

    Web前端模块化组件seajs-3.0.0版

    除了解决命名冲突和依赖管理,使用 Sea.js 进行模块化开发还可以带来很多好处: 模块的版本管理。通过别名等配置,配合构建工具,可以比较轻松地实现模块的版本管理。 提高可维护性。模块化可以让每个文件的职责...

    模块化前端UI框架

    模块化前端UI框架是现代Web开发中的重要工具,它提供了高效、可复用和易于维护的界面组件。这里我们以“layui”为例,它是一个流行的开源JavaScript框架,以其优雅的模块化设计和丰富的UI组件而受到开发者欢迎。解压...

    易语言cmd.ec模块(易语言)

    在Windows系统中,命令行接口(Command Prompt,通常简称为CMD)是执行系统级任务和自动化脚本的一种方式。CMD.ec模块的引入,让易语言程序可以执行系统命令、读取命令输出、管理文件和目录等,极大地扩展了易语言的...

    基于CMD规范的fangfis模块合并gulp插件

    CMD 是一种广泛应用于前端开发的模块化规范,与 AMD(Asynchronous Module Definition)相对,CMD 强调的是同步加载和依赖的就近书写,而 gulp-fangfis-combo 正是为了简化这一过程,提高开发效率而设计的。...

    易语言CMD.rar

    还可以结合其他易语言模块,实现自动化脚本,进行系统维护和优化。 需要注意的是,使用CMD模块时,应确保对命令的使用有充分理解,避免执行可能对系统造成影响的危险命令。同时,由于CMD命令行的权限较高,开发者...

    前端开发模块化理解文档

    目前主流的模块化实现方式包括CommonJS、AMD、ES6以及CMD规范。 1. **CommonJS**:最初是为服务器端JavaScript设计的一种模块化标准,它允许在文件中定义模块,并通过`require`函数来导入其他模块。尽管CommonJS...

    前端模块化1

    前端模块化是现代Web开发中不可或缺的一部分,它允许开发者将复杂的应用程序分解为多个独立的模块,从而提高代码的可读性、可维护性和复用性。模块化的核心思想是将一个大型程序划分为若干个模块,每个模块都有自己...

    《模块化系列》彻底理清 AMD,CommonJS,CMD,UMD,ES6.md

    《模块化系列》彻底理清 AMD,CommonJS,CMD,UMD,ES6

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

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

    模块化与组件化区别文档

    ### 模块化与组件化的区别 随着软件项目的规模逐渐增大,如何有效地组织代码成为了一个重要的议题。在软件工程领域,模块化与组件化是两种常见的解决方案,它们各自有着独特的特性和应用场景。本文将深入探讨模块化...

    简单分页插件simplePagination改造为CMD模块

    - 对于`pagination.css`,CMD规范没有直接涉及CSS模块化,但我们可以利用CSS预处理器(如Sass、Less)或者CSS模块系统(如CSS Modules)来实现更模块化的CSS。如果没有这些工具,可以将CSS文件保持原样,但在使用时...

    js模块化规范介绍ppt

    js模块系统介绍的ppt,简要介绍js现有的几个模块规范,包括commonJS模块规范,amd,cmd,es6模块系统。并详细对比seaJS和requireJS的异同

    CMD规范之seajs

    CMD规范之Seajs Seajs是一款轻量级的前端模块加载器,它遵循CommonJS规范,使得JavaScript在浏览器端也能实现模块化的开发。这个规范主要包含模块定义、模块加载和模块化开发的思想,大大提高了代码的可维护性和...

Global site tag (gtag.js) - Google Analytics