关于CommonJS、AMD、CMD、ES6特点及异同总结

本文总结了CommonJS、AMD、CMD以及ES6在模块化方面的特点,分别阐述了它们在服务端(如Node.js)和浏览器环境中的应用,包括加载方式、同步异步特性、依赖处理和数据导出等方面的不同。
摘要由CSDN通过智能技术生成

1.CommonJS

适用于服务端,node.js遵循该规范,运行时加载,同步加载模块,服务端数据存放于本地,同步加载避免异步加载引起的“假死”状态。不重复引用模块,直接获取导出的数据,导出的数据是值的拷贝

//导出语法
module.exports = { A , B , C }
//或
exports.A = A;//等价于给该导出添加属性方法

//导入语法
let {A} = require('./file1')

2.AMD

适用于浏览器环境,requireJS遵循该规范,异步加载,依赖必须前置!提前执行
define里的模块名和依赖选项可选,模块名驼峰命名,无扩展名

//定义AA.js及导出
define('moduleName',['A','B'],function(arg){   //"AA"前置
	function fn1(){}
	return { fn1 }
})

//导入及使用
require(['moduleName'],function(fn){fn.fn1()})

3.CMD

适用于浏览器环境,seajs遵循该规范,异步加载,采用就近规则,可动态引入模块,延迟执行

define(function(require,exports,module){
	let fn1 = require('./file1')  //动态引入
	...
	module.exports = function(){} //导出
	//或 exports.fn2 = funtion(){}	
})

4.ES6

适用于浏览器环境,编译时执行( import 不可动态引入),不重复引用模块,导出的是值的引用 ,只读,源数据改变时,引用的数据也跟着改变
注: import() 基于Promise,可动态加载模块,也可用 all() 方法指定等待所有模块加载完毕再执行

//导入
import {a, b, c} from './file1';
//导出
export {a, b,  c}

//import()
let a1 = 1,a2 = 2;
if(a2){
	import('./file1').then(({f1})=>{
		console.log(f1)
	})
}

Promise.all([
	import('./file1'),
	import('./file2')
]).then(([{a},{b}])=>{
	console.log(a,b)
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值