这些ES6导入方法有什么区别?

6
这些导入方法有什么区别?
方法 1:
方法 2:
方法 3:
import {sum, pi} from "lib/math";

方法二:
import exp, {pi, e} from "lib/mathplusplus";

es2015文档展示了这两个例子,我无法理解花括号的目的。似乎在import后面列出的所有内容都将被分配给window对象。

参考文档:https://babeljs.io/docs/learn-es2015/


第一个导入命名的出口sumpi。第二个导入默认导出作为exp,并且还命名了导出pie - user663031
如果您有兴趣了解更多关于差异的内容,一个极好的资源是以下: https://github.com/getify/You-Dont-Know-JS/blob/master/es6%20&%20beyond/ch3.md#modules - wmock
3个回答

13

模块可以导出多个内容。模块也可以有单个的“默认”导出。

import exp from "somelib";

这将把somelib默认导出赋值给变量exp

import {a, b} from "somelib";

这将把非默认命名导出ab分配给本地变量ab

import exp, {a, b} from "somelib";

将默认导出分配给exp,将命名导出分配给ab

import * as somelib from "somelib";

获取somelib的所有命名导出,并将它们作为对象分配给本地变量 somelib,这意味着你会得到 somelib.asomelib.b等。

这是一个关于这个主题的很好的资源:http://www.2ality.com/2014/09/es6-modules-final.html


1
在这种情况下,exp是要导入的默认模块,命名为exp。因为pie不是默认值,所以它们被包含在花括号中。
this示例中,您定义了一个默认模块:
export default function(x) {
  return x + x;
}

而且导入时不需要花括号,可以随意命名:

import double from 'mymodule';
double(2); // 4

1

模块可以以两种不同的方式进行 export。它们可以使用 default,或者只执行标准的 export

export default function exp(value, power) {}
export const pi = 3.14159

当你从一个模块中导入时,需要使用花括号来捕获非默认导出。如果你想要默认导出,则不需要使用花括号。
import exp, {pi} from "lib/mathplusplus";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接