ES6 拾遗(9)

Module

ES6模块不是对象, 而是通过export命令显示指定输出的代码, 再通过import命令输入

ES6 模块

import { stat, exists, readFile } from ‘fs’;

上面代码的实质是从fs模块加载3个方法, 而不加载其他方法. 
这种加载被称为 编译时加载 或者 静态加载, 即ES6 可以在编译时就完成模块加载, 效率比CommonJS模块的加载方式高. 
当然这也导致了ES6模块本身无法被引用, 因为它不是对象

export命令

模块功能主要又两个命令构成 export和import.

export命令用于规定模块的对外接口, import命令用于输入其他模块提供的功能.

一个模块就是一个独立的文件. 该文件内部的所有变量, 外部无法获取. 如果希望外部能够读取内部某个变量, 就必需使用export关键字输出改变量

export var firstName = 'Michael'

export var lastName = 'Jackson'

export var year = '1958'

等价于

var firstName = 'Michael'

var lastName = 'Jackson'

var year = '1958'

export { firstName, lastName, year }

export 命令除了输出变量, 还可以输出函数或者类

export function add( a,b ){

    return a+b;

}

通常情况, export输出的变量就是本来的名字, 但是可以使用as关键字重命名

export {

    v1 as streamV1,

    v2 as streamV2

}

import 命令

使用export命令定义了模块的对外接口以后, 其他js文件就可以通过import命令加载这个模块了

export default 命令

使用import命令时用户需要知道所要加载的变量名或者函数名, export default命令可以为模块指定默认输出, 用户就可以不用知道具体名称了