ES6模块只反对动态导出,只能够在模块的最外层作用域应用export,不可在条件语句与函数作用域中应用。

Named exports (命名导出)

这种形式次要用于导出多个函数或者变量, 明确晓得导出的变量名称。
应用:只须要在变量或函数后面加 export 关键字即可。
应用场景:比方 utils、tools、common 之类的工具类函数集,或者全站对立变量等。

export 前面不能够是表达式,因为表达式只有值,没有名字。
// lib.jsexport const sqrt = Math.sqrt;export function square(x) {    return x * x;}export function diag(x, y) {    return sqrt(square(x) + square(y));}// index.js 应用形式1import { square, diag } from 'lib';console.log(square(11)); // 121// index.js 应用形式2import * as lib from 'lib';console.log(lib.square(11)); // 121

简写格局,对立列出须要输入的变量,例如下面的lib.js能够改写成:

// lib.jsconst sqrt = Math.sqrt;function square(x) {    return x * x;}function add (x, y) {    return x + y;}export { sqrt, square, add };

Default exports (默认导出)

这种形式次要用于导出类文件或一个性能比拟繁多的函数文件;
应用:只须要在变量或函数后面加 export default 关键字即可。

  1. 一个模块最多只能有一个默认导出;
  2. 默认导出能够视为名字是default的模块输入变量;
  3. 默认导出前面能够是表达式,因为它只须要值。

export default 与 export 的次要区别:

  • 不须要晓得导出的具体变量名;
  • 导入【import】时不须要 { } 包裹;

导出一个函数:

// myFunc.jsexport default function () { ... };// index.jsimport myFunc from 'myFunc';myFunc();

导出一个类:

// MyClass.jsclass MyClass{  constructor() {}}export default MyClass;// index.jsimport MyClass from 'MyClass';

Mixed exports (混合导出)

混合导出是Named exportsDefault exports组合导出。

混合导出后,默认导入肯定放在命名导入后面;
// lib.jsexport const myValue = '';export const MY_CONST = '';export function myFunc() {  ...}export function* myGeneratorFunc() {  ...}export default class MyClass {  ...}// index.js 【MyClass 必须在后面】import MyClass, { myValue, myFunc } from 'lib';

比方 lodash:

// lodash.jsexport default function (obj) {    ...};export function each(obj, iterator, context) {    ...}// index.jsimport _, { each } from 'lodash';

Re-exporting (别名导出)

个别状况下,export 导出的变量名是原文件中的变量名,但也能够用 as 关键字来指定别名。这样做是为了简化或者语义化 export 的函数名。
同一个变量容许应用不同名字输入屡次

// lib.jsfunction getName() {   ...};function setName() {  ...};export {  getName as get,  getName as getUserName,  setName as set}

Module Redirects (直达模块导出)

为了防止下层模块导入太多的模块,可能应用底层模块作为直达,间接导出另一个模块的内容。

//  myFunc.jsexport default function() {...};// Header.jsexport default Header               // Footer.jsexport default Header// lib.jsexport * from 'myFunc';export { default as Header } from './Header';export { default as Footer } from './Footer'export function each() {...}; // index.jsimport myFunc, { Header, Footer, each } from 'lib';