Импорт-выражение позволяет подключить в текущий модуль определения, экспортируемые из другого модуля:
Импорт выражение должно быть top-level
Импорты должны быть compile-time resolved
Нельзя делать условные импорты и т.д.
Определения, сделанные при помощи импортов, поднимаются как var-определения.
import-expression
Импорт выполняется при помощи ключевого слова import, после чего идет import- выражение (объявления), далее ключевое слово from и указывается относительный/абсолютный или URL-путь к модулю.
import var from'module';
ES6 provides several styles of importing:
Default import:
import localName from"src/my_lib";
Namespace import: imports the module as an object (with one property per named export).
import*as my_lib from"src/my_lib";
Named imports:
import { name1, name2 } from"src/my_lib";
You can rename named imports:
// Renaming: import `name1` as `localName1`import { name1 as localName1, name2 } from"src/my_lib";
Empty import: only loads the module, doesn’t import anything. The first such import in a program executes the body of the module.
There are only two ways to combine these styles and the order in which they appear is fixed; the default export always comes first.
Combining a default import with a namespace import.
Combining a default import with named imports.
Результатом import-выражения является объявление в текущем пространстве имен определений (bindings) из других модулей. При импорте не выполняется копирование значений из других модулей. Фактически, семантика импорта соответствует определению новой переменной и пере-присваиванию.
Синтаксис named imports похож на деструкцию, но технически ей не является. Нельзя использовать паттерны деструкции в импорте.
Imports view on exports
Импортированные значения являются read-only представлениями экспортируемых сущностей. Другими словами, любой импорт -- это живое соединение с экспортируемыми элементами.
Импорты вида import x from 'foo' работают аналогично const
Импорты вида import * as foo from 'foo' работают аналогично замороженным объектам.
Можно модифицировать состояние подключенного модуля используя замыкания и другие приемы:
Если значение внутри модуля поменялось, то его увидят и клиенты этого модуля. Нельзя изменить импортируемое значение, но можно изменить его содержимое, если это объект??