В чем разница между этими методами импорта ES6?

В чем разница между этими методами импорта?

Способ 1:

import {sum, pi} from "lib/math";

Способ 2:

import exp, {pi, e} from "lib/mathplusplus";

Документы es2015 показали эти два примера, и я не могу понять назначение фигурных скобок. Похоже, что все вещи, перечисленные после импорта, все равно будут назначены объекту window.

Документы для справки: https://babeljs.io/docs/learn-es2015/


person Don P    schedule 08.12.2015    source источник
comment
Первый импорт назван экспортом sum и pi. Второй импортирует экспорт по умолчанию как exp, а также экспортирует имена pi и e.   -  person    schedule 08.12.2015
comment
Если вам интересно узнать больше о различиях, отличным ресурсом является следующий: github.com/getify/You-Dont-Know-JS/blob/master/   -  person wmock    schedule 08.12.2015


Ответы (3)


модули могут экспортировать несколько вещей. Модули также могут иметь один экспорт «по умолчанию».

import exp from "somelib";

Это присваивает экспорт по умолчанию somelib переменной exp.

import {a, b} from "somelib";

Это назначает именованные экспорты не по умолчанию a и b локальным переменным a и b.

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

Назначает экспорт по умолчанию exp, а именованный экспорт — a и b.

import * as somelib from "somelib";

Берет все именованные экспорты somelib и присваивает их как объект локальной переменной somelib, что означает, что у вас будет somelib.a, somelib.b и т. д.

Это очень хороший ресурс по теме: http://www.2ality.com/2014/09/es6-modules-final.html

person Brandon    schedule 08.12.2015

В данном случае exp — это импортируемый модуль default с именем exp. pi и e заключены в фигурные скобки, потому что они не установлены по умолчанию.

В этом примере вы определили модуль по умолчанию:

export default function(x) {
  return x + x;
}

И импорт без фигурных скобок, называйте как хотите:

import double from 'mymodule';
double(2); // 4
person Sterling Archer    schedule 08.12.2015

Модули могут export двумя разными способами. Они могут использовать default или просто выполнить стандартный export

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

Когда вы import из модуля, вам нужно использовать фигурные скобки для захвата экспорта не по умолчанию. Если вам нужен экспорт по умолчанию, фигурные скобки вам не нужны.

import exp, {pi} from "lib/mathplusplus";
person Kyeotic    schedule 08.12.2015