ES6 模块与 CommonJS 模块有什么异同?
ES6 Module 和 CommonJS 模块的区别:
CommonJS 是对模块的浅拷⻉,ES6 Module 是对模块的引⽤,即 ES6
Module 只存只读,不能改变其值,也就是指针指向不能变,类似 const;
import 的接⼝是 read-only(只读状态),不能修改其变量值。 即
不能修改其变量的指针指向,但可以改变变量内部指针指向,可以对
commonJS 对重新赋值(改变指针指向),但是对 ES6 Module 赋值会
编译报错
commonjs模块主要是最初应用于服务端(node.js),导入导出方式为module.exports和exports,导入方式为require("...")
calculator.js
module.exports = {
name: 'sum',
add: (a, b) => a + b
}
// index.js
const sum= require('./sum')
ES6 Module 和 CommonJS 模块的共同点:
CommonJS 和 ES6 Module 都可以对引⼊的对象进⾏赋值,即对对象内
部属性的值进⾏改变。
sum.js
const name = 'sum'
const add = (a, b) => a + b
export {name , add as sum} // 导入时即为 name 和 sum
//index.js
import {name as myName, sum} from './sum.js'
console.log(sum(1, 2), myName)
AMD (异步加载,异步执行,)
异步加载,不会阻塞浏览器构造dom树
自动加载依赖,不再需要手动引入模块间的依赖关系
目前requireJS和curlJS为这个标准的主要实现
CMD(异步加载,同步执行)
CMD是淘宝团队开发的SeaJS在推广过程中的产出,弥补了AMD的一大缺点——异步执行,由于AMD是异步加载,所以执行的顺序与加载速度有关,并且不可控,这就非常不友好,于是CMD提倡的依赖就近就解决了这个问题。