Commin.js与ES6模块化

文章对比了CommonJS和ES6模块的特性,CommonJS使用`module.exports`和`require`进行导出和导入,支持同步加载,适合服务器端。而ES6模块使用`export`和`import`,是静态加载,适用于浏览器环境,导入的是只读引用。CommonJS模块导出是值拷贝,ES6则是动态映射。
摘要由CSDN通过智能技术生成

CommonJS

1.通过module.exports 导出(向外暴露的唯一方式)

2.使用require进行导入    如果导入的模块再次被加载,直接导出第一次被加载的时执行的内容 

缓存值

ES6模块

1.通过exports导出

2.命名导出/批量 exports { a , b }   -----   默认导出 exports default a (每次导出一个)

export {  nikename  as  name  }

3.通过import 导入  可以使用as重命名  

4.在浏览器中使用module ,引入相同的 nomodule 脚本会被执行多次,而模块只会被执行一次:

moudle对象.loaded 判断是否执行过

如 import * as 

CommonJS 与ES6模块的区别

CommonJS 对模块依赖的解决是动态的,而ES6模块是静态的  

模块导入时,commin.js 是值拷贝,ES6模块则为只读的动态映射

动态:模块的依赖关系建立在代码运行阶段
静态:模块的依赖关系建立在代码编译阶段

common.js 可以动态导入模块,使用 if 语句引入不同的模块

CommonJS 模块的 require() 是同步加载模块,ES6 模块的import命令是异步加载,有一个独立的模块依赖的解析阶段

转化

es6模块

// a.js

export default function () {
  console.log("hello world");
}
//  index.js 
import a from "./a.js";   // 默认导出可以自由命名
a();   "hello world"

转换为common JS模块

//  a.js
module.exports = function(){
  console.log("hello world");
}
// index.js 

const a = require("./a.js");
a();

export { a ,b }

//  a.js
const a = {
  name: "mingyong.g",
};

const fun = function () {
  console.log("hello world");
};

export { a, fun };
//  index.js
import { a, fun } from "./a.js";  // 导入时名字必须和导出时的命名一致
console.log(a);   //"mingyong.g"
fun();    //"hello world"

common.js

// a.js
const a = {
  name: "mingyong.g",
};

const fun = function () {
  console.log("hello world");
};

module.exports = {
  a,
  fun,
};

// 或者使用下面这种方式导出
//批量导出
module.exports.a = a;
module.exports.fun = fun;
// index.js 
const module = require("./a.js")   // 导入的是一个整体,是{a:a,fun:fun}形式
const a = module.a;
const fun = module.fun;

总结

common.js导入的是一份值拷贝,允许对导入 的值进行修改,不会影响原模块的数据,出现某个模块被“循环加载”,就只输出已经执行的部分,没有执行的部分不会输出。

moudlue 导出的值为动态映射,且值为只读,遇到模块加载命令import时不会去执行模块,只是生成一个指向被加载模块的引用。

Node导出的本质是导出moudle.exports对象

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值