exports、module.exports和export、export default之间的区别(简单版)

直接简单粗暴进入正题,本文只是为了在记忆模糊的时候快速纠正。

先来个总结:

require: node 和 es6 都支持的引入(CommonJS规范)
export / import : 只有es6 支持的导出引入
module.exports / exports: 只有 node 支持的导出(CommonJS规范)

然后分别具体看看先关的使用方法:

CommonJS规范:

简单来说:CommonJS定义的模块分为: 模块标识(module)、模块定义(exports) 、模块引用(require)

module.exports 和 exports 的关系 :

exports = module.exports = {};

也就是说exports = module.exports 都指向同一个内存地址,再来看看一个例子:

// a.js
let a = 100;

exports.a = 200;
// 然后把a指向另外一个地址
exports = '另外的地址'

// b.js
// 引入模块

var example = require('./a.js')
console.log(example.a)  // 200

可以看出,require导出的内容是module.exports的内容,而不是exports的,简单来说,exports用来帮助module.exports操作内存中的数据。

最简单的方法就是尽量都用 module.exports。避免混淆。

ES6

export 和 export default的区别:

  • 在一个文件或模块中,export、import可以有多个,export default仅有一个
  • 通过export方式导出,在导入时要加{ },export default则不需要
  • export能直接导出变量表达式,export default不行。

直接看例子,一目了然:

//a.js
export const a = '100'  // 方式一
const Stark = function(){ 
    console.log('im ironman')
}// 方式二

export { Stark }


// export default方式
const mark85 = 1000
export default mark85

// b.js
import { a, Stark } from './a.js';  // 引入export导出的数据
import ironman from './a.js' // 引入export default导出的数据
import * as hero from './a.js' // 集合成对象一并导出

console.log(a) // 100
Stark(); // im ironman
console.log(ironman) // 1000
console.log(hero.a) // 100
console.log(hero.default) // 1000

你可能感兴趣的:(基础内容)