export和import的用法总结

ES6中export通常的用法有两种javascript

  1. 命名导出(Named exports)
  2. 默认导出(Default exports)

命名导出(Named exports)

就是每个须要输出的数据类型都要有一个name,统一输入必定要带有{},即使只有一个须要输出的数据类型。这种写法清爽直观,是推荐的写法。php

//------ lib.js ------
const sqrt = Math.sqrt;
function square(x) {
    return x * x;
}
function diag(x, y) {
    return sqrt(square(x) + square(y));
}

export {sqrt, square, diag}

//------ main.js ------
import { square, diag } from 'lib';                
console.log(square(11)); // 121
console.log(diag(4, 3)); // 5

把export直接加到声明前面就能够省略{}html

//------ lib.js ------
export const sqrt = Math.sqrt;
export function square(x) {
    return x * x;
}
export function diag(x, y) {
    return sqrt(square(x) + square(y));
}

//------ main.js ------
import { square, diag } from 'lib';                
console.log(square(11)); // 121
console.log(diag(4, 3)); // 5

不管怎样输出,输入的时候都须要{}java

别名导入(Aliasing named imports)

当从不一样模块输入的变量名相同的时候node

import {speak} from './cow.js'
import {speak} from './goat.js'

这些写法显然会形成混乱git

正确的方法是这样的es6

import {speak as cowSpeak} from './cow.js'
import {speak as goatSpeak} from './goat.js'

但是,当从每一个模块须要输入的方法不少的时候,这种写法就显得十分的繁琐、冗长,例如github

import {
  speak as cowSpeak,
  eat as cowEat,
  drink as cowDrink
} from './cow.js'

import {
  speak as goatSpeak,
  eat as goatEat,
  drink as goatDrink
} from './goat.js'

cowSpeak() // moo
cowEat() // cow eats
goatSpeak() // baa
goatDrink() // goat drinks

解决方案就是命名空间导入了api

命名空间导入(Namespace imports)
import * as cow from './cow.js'
import * as goat from './goat.js'

cow.speak() // moo
goat.speak() // baa

十分的简洁优雅ide

默认导出(Default exports)

默认输出就不须要name了,可是一个js文件中只能有一个export default。

//------ myFunc.js ------
export default function () { ... };

//------ main1.js ------
import myFunc from 'myFunc';
myFunc();

其实这种导出方式能够当作是命名导出的变种,只不过把命名写成了default。

虽然export default只能有一个,但也能够输出多个方法。

export default {
  speak () {
    return 'moo'
  },
  eat () {
    return 'cow eats'
  },
  drink () {
    return 'cow drinks'
  }
}

输入与命名空间输入相似

import cow from './default-cow.js'
import goat from './default-goat.js'

cow.speak() // moo
goat.speak() // baa

若是咱们在编写模块的时候使用的输出方法不统一,那么引入的时候就须要考虑不一样模块输入的方式。这种麻烦能够经过自引用的方法消除。方法以下

编写两种输入方式通用的模块

import * as myself from './ambidextrous-cow.js' // import this file into itself

// this module's own namespace is its default export
export default myself

export function speak () {
  console.log('moo')
}

这样在输入的时候就不须要考虑输入方式了。

import cow from './ambidextrous-cow'
import * as alsocow from './ambidextrous-cow'

cow.speak() // moo
alsocow.speak() // moo

两种输入方法都可。

这种方法也有一个小缺点,就是在咱们编写的模块中,有一个function是经常使用的,咱们想默认输出,可export default已经使用了,而咱们知道export default在一个模块中只能使用一次。这时就要使用Object.assign

import * as myself from './ambidextrous-cow.js' 

export default Object.assign(speak, myself) 

export function speak () {
  console.log('moo')
}

须要注意的是,Object.assign只能用于function。

对应输入的例子

import cow from './ambidextrous-cow'
import * as alsocow from './ambidextrous-cow'

cow() // moo
cow.speak() // moo
alsocow.speak() // moo

参考文章

1.[es6] import, export, default cheatsheet

2.详解JavaScript ES6中export import与export default的用法和区别

3.ES Modules: Using named exports as the default export

4.export in MDN

我在github
https://github.com/zhuanyongx...

相关文章
相关标签/搜索