Примеры использования import
и export
в ES6
.
Частичный перевод статьи “Complete Guide For ES6 Import And Export Syntax Changes” с сайта medium.com
С приходом ES6 в JavaScript появилась модульность. Каждый файл теперь может являться модулем и содержать переменные недоступные для других модулей пока мы явно не захотим сделать их доступными. А именно – экспортировать.
Существует 2 типа экспорта:
- Именованный экспорт
- Экспорт по-умолчанию
Именованный экспорт
Именованных экспортов может быть много в рамках одного модуля.
Чтобы экспортировать переменную в модуле мы делаем это так:
const myVar = 'value'; export myVar;
или
export const myVar = 'value';
Можно экспортировать сразу несколько переменных:
const a = 1; const b = 2; export { a, b };
Обратите внимание, что `{ a, b }` это не литерал объекта, поэтому так делать нельзя:
export { a: 1, b: 2 };
Далее, чтобы импортировать переменную из другого модуля, делаем так:
import { a } from './module';
или
import { a, b } from './path/to/module';
Важно заметить, что имя переменной при импорте обязано совпадать с именем переменной при экспорте.
Если в модуле уже есть переменная с именем `a` и нужно импортировать новую, то можно сделать так:
import { a as c, b as d } from './module'
то же самое можно сделать и при экспорте:
const a = 3.14; export { a as pi };
Для того чтобы экспортировать переменную – она должна быть определена.
Так работать не будет:
export 'value';
а так правильно:
export const e = 'value';
Порядок переменных при импорте не важен, ровно как и при экспорте.
Если есть такой экспорт:
const a = 1; const b = 2; const c = 3; export { c, a, b }; // порядок произвольный
то импортирование может быть таким:
import { b, c, a } from './module'; // порядок произвольный
или:
import { b } from './module'; // только нужная переменная
Экспорт по-умолчанию
Только один экспорт по-умолчанию может быть создан в рамках одного модуля, но в одном и том же модуле/файле может быть несколько именованных экспортов и один экспорт по-умолчанию.
Делается так:
const a = 1; export default a;
Импорт, в свою очередь, делается так:
import a from './module';
Обратите внимание, что нельзя делать экспорт по-умолчанию в момент инициализации переменной.
Так работать не будет:
export default const a = 1;
Но есть возможность экспортировать данные без определения переменной:
export default { a: 1, // переменная b: arg => arg, // функциональная переменная c: {} // объект }
Импорт вышеуказанного может выглядеть так:
import data from './module'; console.log(data.a); // 1 console.log(data.b(2)); // 2 console.log(data.c); // {}
Можно импортировать сразу все переменные использую wildcard или alias.
Например:
// module.js export const a = 1; export const b = 2; const c = 3; export default c;
import * as data from './module'; console.log(data.a); // 1 console.log(data.b); // 2 console.log(data.default); // 3
При необходимости можно делать именованный экспорт одновременно с экспортом по-умолчанию.
Например:
const a = 1; const b = 2; const c = 3; export { a, b, c as default };
Похожее можно делать и при импорте:
import c, { a, b } from './module';
Недаюсь данное объяснение поможет вам лучше понять import и export.