js模块化之模块依赖处理

本文介绍了JavaScript中不同模块化处理模式下的依赖管理方法,包括ES6模块、CommonJS、AMD及CMD标准,并对比了AMD与CMD在依赖加载及执行时机上的差异。

javascript中模块依赖处理

在javascript模块化处理模式,为处理模块间的依赖,多个js库提出了各自的模块依赖处理模式。而且功能越来越复杂,模块文件越来越多,我们需要时刻小心模块之间的依赖。

ES6 模块中模块依赖处理

比如:

import MyModule from ‘./MyModule.js’;

CommonJS中模块依赖处理

var MyModule = require(‘./MyModule.js’);

AMD中模块依赖处理

define([‘./MyModule.js’], function (MyModule) {

});

===========
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:李翌
链接:http://www.zhihu.com/question/20342350/answer/24718689
来源:知乎

假设你对CMD、AMD还没有认识,可以移步这里:

两个类库在模块和factory的书写上其实无太大差异,差异在于模块的加载factory函数的执行。

区别:
1. 对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible.
2. CMD 推崇依赖就近,AMD 推崇依赖前置。看代码:

// CMD
define(function(require, exports, module) {
   var a = require('./a')
   a.doSomething()   
   // 此处略去 100 行   
   var b = require('./b') // 依赖可以就近书写 
   b.doSomething()   
   // ... 
})
// AMD 默认推荐的是
define(['./a', './b'], function(a, b) {  
    // 依赖必须一开始就写好    
    a.doSomething()    
    // 此处略去 100 行    
    b.doSomething() 
    // ...
}) 

虽然 AMD 也支持 CMD 的写法,同时还支持将 require 作为依赖项传递,但 RequireJS 的作者默认是最喜欢上面的写法,也是官方文档里默认的模块定义写法。
3. AMD 的 API 默认是一个当多个用,CMD 的 API 严格区分,推崇职责单一。比如 AMD 里,require 分全局 require 和局部 require,都叫 require。CMD 里,没有全局 require,而是根据模块系统的完备性,提供 seajs.use 来实现模块系统的加载启动。CMD 里,每个 API 都简单纯粹。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值