exports 、module.exports 和 export 、 export default的差异

一、使用范围

require  : node支持引入

export/import : 只有es6支持的导出/引入

module.export / exports : 只有node支持的导出

 

二、node模块

Node 里面的模块系统遵循的是CommonJs规范,commonJs定义的模块分为:模块标识(module)、模块定义(exports)、模块引用(require)

exports和module.exports在一个node执行一个文件时,会给这个文件生成一个exports和module对象,而module又有一个exports属性。他们之间的关系如下图,都指向一个块{}内存区域。

exports = module.exports = {};

//utils.js
let a = 100;

console.log(module.exports); //能打印出结果为:{}
console.log(exports); //能打印出结果为:{}

exports.a = 200; //这里辛苦劳作帮 module.exports 的内容给改成 {a : 200}

exports = '指向其他内存区'; //这里把exports的指向指走

//test.js

var a = require('/utils');
console.log(a) // 打印为 {a : 200} 

从上面可以看出,其实require导出的内容是module.exports的指向的内存块内容,并不是exports的。 简而言之,区分他们之间的区别就是 exports 只是 module.exports的引用,辅助后者添加内容用的。

 

三、es6 export和export default的区别

1.export和export default 都可以导出 常量、函数、模块、文件。

2.export default在一个模块中只能有一个,export可以有多个

3.export 导出的内容需要包再{}中接收,export default则不需要

4.模块中通过export 导出的(属性或者方法)可以修改,但是通过export default导出的不可以修改。

    //model.js
    let e1='export 1';
    let e2='export 2';
    export {e2};
    export default e1;
    e1='export 1 modified';
    e2='export 2 modified';


    //index.js
    import e1, {e2}from "./model";
    console.log(e1);
    console.log(e2);


    #index.js执行结果  
    export 1
    export 2 modified

tips:

a.es6中模块通过export 和 export default 暴露出来的属性或者方式并不是普通的赋值或者引用,他们是对模块内部定义的标识符类似指针的绑定。

b.对于一个导出的属性或者方法,在什么地方导出不重要,在什么时候导入也不重要,重要的是:访问这个绑定的时候的当前值。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值