理解Commonjs、AMD、CDM概念

在开发的过程中,对Commonjs、和ES6引入模块的规范感念不是很清晰,特意学习了一下其他大神的科普文章。

  1. Node是使用CommonJS模块规范。ComonJs规范是 exports 与 module.exports和内置的require命令搭配使用,用于加载模块文件。
    2.ES6模块规范中 使用 export 和 import 来导出、导入模块;使用export default命令,为模块指定默认输出。

说到模块规范就引出了AMD和CMD规范的定义:

  • AMD是RequireJS在推广过程中对模块定义的规范化产出。
  • CMD是SeaJS在推广过程中对模块定义的规范化产出。
  • 对于依赖的模块,AMD是提前执行,CMD是延迟执行。
  • 不过 RequireJS从 2.0开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇as lazy as possible. CMD推崇依赖就近,AMD推崇依赖前置。
//CMD
define(function(require, exports, module) {   
   let a = require('./a'); 
   a.doSomething();
   ···
   let b = require('./b'); // 依赖可以就近书写   
   b.doSomething();
   ... 
})

// AMD 默认推荐的是
define(['./a', './b'], function(a, b) { 
  // 依赖必须一开始就写好    
  a.doSomething()   
  ...
  b.doSomething()   
  ...
})

虽然AMD也支持CMD的写法,同时还支持将require作为依赖项传递,但RequireJS的作者默认是最喜欢上面的写法,也是官方文档里默认的模块定义写法。

AMD 的API默认是一个当多个用,CMD的API严格区分,推崇职责单一。
比如AMD里,require分全局require和局部require,都叫 require。CMD里,没有全局require,而是根据模块系统的完备性,提供seajs.use来实现模块系统的加载启动。CMD里,每个API都简单纯粹。
拓展
目前所有的引擎都还没有实现import,在node中使用babel支持ES6,也仅仅是将ES6转码为ES5再执行,import语法会被转码为require。这也是为什么在模块导出时使用module.exports,在引入模块时使用import仍然起效,因为本质上,import会被转码为require去执行。

引用文献:
https://javascript.ruanyifeng.com/nodejs/module.html
https://www.cnblogs.com/web-record/p/12705808.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值