Параметры экспорта ES6 + javascript

Я видел публичный экспорт модулей ES6, выполненный одним из следующих способов:

// method 1
export var getAnswer = function () { return 'forty two'; };

// method 2
export default function () { return 'forty two'; };
  • Имеются ли оба этих значения?
  • Если да, то почему они оба существуют?
  • Существуют ли другие допустимые параметры экспорта модулей с использованием синтаксиса ES6?

Я удивлен, что не смог найти ответ с моим googlefu. Меня интересуют только модули ES6, а не CommonJS, RequireJS, AMD, Node и т.д.

Ответ 1

Через год, а затем, вот лучшая информация, которую я нашел по этому вопросу.

Существует 4 типа экспорта. Ниже приведены примеры использования каждого из них, а также некоторые импортеры, которые их используют:

Синтаксис экспорта

// default exports
export default 42;
export default {};
export default [];
export default (1 + 2);
export default foo;
export default function () {}
export default class {}
export default function foo () {}
export default class foo {}

// variables exports
export var foo = 1;
export var foo = function () {};
export var bar;
export let foo = 2;
export let bar;
export const foo = 3;
export function foo () {}
export class foo {}

// named exports
export {};
export {foo};
export {foo, bar};
export {foo as bar};
export {foo as default};
export {foo as default, bar};

// exports from
export * from "foo";
export {} from "foo";
export {foo} from "foo";
export {foo, bar} from "foo";
export {foo as bar} from "foo";
export {foo as default} from "foo";
export {foo as default, bar} from "foo";
export {default} from "foo";
export {default as foo} from "foo";

Синтаксис импорта

// default imports
import foo from "foo";
import {default as foo} from "foo";

// named imports
import {} from "foo";
import {bar} from "foo";
import {bar, baz} from "foo";
import {bar as baz} from "foo";
import {bar as baz, xyz} from "foo";

// glob imports
import * as foo from "foo";

// mixing imports
import foo, {baz as xyz} from "foo";
import foo, * as bar from "foo";

// just import
import "foo";

Источник

Ответ 2

Оба они действительны.

Метод 1 предоставляет named export. Ключевым моментом здесь является то, что вы можете экспортировать несколько штук. Это нужно использовать вместо экспорта объекта с несколькими свойствами. Когда вы импортируете модуль с указанным экспортом, используйте import {a, b} from c.

Метод 2 обеспечивает экспорт по умолчанию. Там может быть только один экспорт по умолчанию. Это прежде всего используется при экспорте одной вещи, например, class или одной function, которую вы ожидаете использовать без какой-либо дополнительной поддержки. При импорте модуля с экспортом по умолчанию используйте import d from c.

Обратите внимание, что вы можете использовать оба! поэтому, если у вас есть основная, основная функция с несколькими иногда используемыми помощниками, вы можете export помощники и export default первичный. Когда вы импортируете модуль и нуждаетесь в обоих видах экспорта, используйте import d, {a, b} from c.

Еще один вариант заключается в том, что вы можете получить именованный экспорт, указав их в конце своего модуля, например: export {a,b,c}. Вы также можете переименовать их export {a as $a, b as c}.

Я получил все это из этой статьи, который является лучшим источником для актуальной информации модуля модуля es6, которую я смог найти.

Ответ 3

  • Имеются ли оба этих значения?

Нет, export function () { return answer; }; недопустимо, либо вы используете значение по умолчанию, либо добавляете имя в объявление этой функции.

  1. Если да, то почему они оба существуют?

Они не:)

  1. Существуют ли другие допустимые параметры экспорта модулей с использованием синтаксиса ES6?

Здесь вы можете увидеть множество допустимых параметров: https://github.com/eslint/espree/pull/43