ES6模块和Commonjs的差异

ES6模块和Commonjs的差异

  • CommonJS 是 nodejs 中的模块化工具,只能使用在服务器端,而ES6模块是客户端开发的模块化工具,但现在即可以使用在客户端也可以使用在服务器端。( Node.js v13.2 版本开始,Node.js 已经默认打开了 ES6 模块支持。 )

  • CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。

CommonJS


// module.js
  let count = 3;
const doCount = function(){
    count ++;
}
module.exports = {count, doCount};
// main.js
let obj = require('./CommonJSModule.js');
console.log(obj.count); // 3
obj.doCount();
console.log(obj.count); // 3

变量count没有改变,所以count是拷贝了值

ES6模块

// module.js
let count = 3;
function doCount(){
    count ++;
}
export {count, doCount}; // 导出一个对象

// main.js
import {count, doCount} from './ES6module.js'; // 属性的解构赋值
console.log(count); // 3
doCount(); // count ++
console.log(count); // 4

变量count发生了改变,所以count是引用的

  • CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。
  // ES6语法
   if(condition){
        import ....
    }else{
        import ....
    }
    // 报错

    // CommonJS语法
    if(condition){
        require('module1') 
    }else{
        require('module2')
    }
    // 允许
  • CommonJS 模块的require()是同步加载模块,ES6 模块的import命令是异步加载,有一个独立的模块依赖的解析阶段。
  • CommonJS 导入的一定是一个对象,但可以使用一个对象变量接受,也可以使用解构赋值,但前者更加常用,ES6一般返回一个对象,一般使用{}解构赋值接收,当然也可以使用 * 接受真的对象, 当有一个default值时,直接返回default,不确定是不是对象
  // ES6模块语法
  // 解构赋值
  import {db, users} from './constants/index.js';
  //  * 作为对象
  import * as obj from './ES6module.js'
  // default
  import mydefault from './default.js';

  // Commonjs语法
  const http = require('http');
  const {get,post} = require('./axios');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值