CMD规范

对于浏览器端,为了实现JavaScript模块化开发,提出了AMD和CMD规范。
本文介绍一下CMD规范包含的内容,主要介绍内容包含书规则和引用方式。

define—–定义


顾名思义,define是用来定义模块的,它是一个全局函数,可以接受不同形式的参数。
形式:

define(name?,depend?,constructor)
//例子
define('helloWorld',['react','vue'],function(require,exports,module){
    //模块代码
});

上述包含三个参数


  • name: 是一个字符串,表示模块标识;
  • depend: 是一个数组,表示模块的依赖文件列表;
  • constructor: 当此参数是字符串,对象时,返回的接口就是本身。当为函数时,成这个函数为模块的构造函数,执行此函数,得到向外提供的接口。此函数默认接受三个参数:requireexportsmodule,下文会详细介绍这三个参数分别是什么。
    注意:

上面的形式其实并不能说是 CMD规范要求的, CMD规范不带前两个参数。
define.cmd

一个空对象,可判断当前页面是否有CMD模块加载器

if (typeof define === "function" && define.cmd) {
  // 有满足CMD规范的模块加载器存在
}

require—–加载


require是一个方法,根据模块标识,获取其他模块提供的接口。
使用方法:

require(name);
//demo
define(function(require){
    var a = require("a");
    a.sayHello();
})
require.async—–异步加载

此方法用于在模块内部异步加载模块,加载完执行相应回调函数。
如下:

//格式
require(name,callback?);
//demo
define(function(){
    //异步加载一个模块
    require.async("a",function(a){
        a.sayHello();
    });
    //异步加载多个模块
    require.async(['a','b'],function(a,b){
        a.sayHello();
        b.sayHello();
    });
})

注意:

require是同步向下执行,require.async是异步回调执行。require.async一般用来加载可延迟加载的模块。

require.resolve—–异步加载

此方法返回模块的绝对路径,但是并不会加载模块。

module—–模块

此对象用于存储模块相关信息。

module.id—–标识符

使用define定义模块的时候,可以传入一个唯一标识此模块的标识符。通过module.id属性可以获取模块的标识符。

module.uri—–路径

获取模块绝对路径。

module.dependencies—–依赖

一个数组,获取模块的依赖。

module.exports—–输出

此属性用于定义模块对外接口。

module.exports = {a:1};
module.exports.a = 1;
module.exports = new A();

定义模块时,传给constructor构造函数的第二个参数exports也可用于定义对外的接口,因为exportsmodule.exports的一个引用。
注意,如下使用,并不能成功定义对外接口:

exports = {};

原因在于:exports原本是module.exports的一个引用,上面的代码会改变exports的引用。

另外还可通过return直接返回对外接口:

return {
    a: 1
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值