Я видел публичный экспорт модулей 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; };
недопустимо, либо вы используете значение по умолчанию, либо добавляете имя в объявление этой функции.
- Если да, то почему они оба существуют?
Они не:)
- Существуют ли другие допустимые параметры экспорта модулей с использованием синтаксиса ES6?
Здесь вы можете увидеть множество допустимых параметров: https://github.com/eslint/espree/pull/43