export 和 exports

首先我们要明白一个前提,CommonJS模块规范和ES6模块规范完全是两种不同的概念。

1. CommonJS规范

Node应用由模块组成,采用CommonJS模块规范。根据这个规范,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。

// commonJS
exports.add = function(){
  console.log('add function')
}
// or
module.exports = {
  add:function() {
    console.log('add function')
  },
  reduce(){
    console.log('reduce function')
  }
}
为了方便,Node为每个模块提供一个exports变量,指向module.exports。这等同在每个模块头部,有一行这样的命令。
let exports = module.exports;

2. ES6模块规范

不同于CommonJS,ES6使用 export 和 import 来导出、导入模块。

// 导出
let firstName = 'Michael';
let year = 1958;

export {firstName, year};

// 导入
import {firstName, year} from './xxx/xxx'
console.log(firstName, year)

export default 为模块指定默认输出,一个js文件只能有一个默认导出。

// default 的方法名,需要在function之后
export default function get() {
    console.log('get');   
}

// const let 不需要
export const get = function() {
    console.log('get');
}

相关文档:
CommonJS规范:http://javascript.ruanyifeng.com/nodejs/module.html
ES6 模块语法:http://es6.ruanyifeng.com/#docs/module

你可能感兴趣的:(export 和 exports)