es6 импорт для значения побочных эффектов
Я читал ссылку на инструкцию импорта es6 на MDN. Синтаксис:
import "my-module";
импортирует весь модуль только для побочных эффектов, без импорта каких-либо привязок. Я не уверен, что означают побочные эффекты. Я использовал с угловой, сказав import "angular"
, Angular привязывается к окну, но не возвращает объект. Поэтому я не уверен, будет ли это вызвано как побочный эффект.
3 ответа
Когда вам нужно импортировать что-то, что ничего не экспортирует, но делает что-то еще, это модуль только с побочными эффектами. Вы импортируете его только для инициализации.
Чистые и не чистые модули
Если вы думаете о модулях как о функциях, то модуль, который воздействует только на область, экспортируя его содержимое, похож на функцию, которая всегда возвращает одно и то же (чистая функция без параметров). Независимо от того, сколько раз вы будете импортировать реакцию 15.01, вы всегда получите объект, который содержит одни и те же методы.
Модуль с побочными эффектами - это модуль, который изменяет область видимости другими способами, а затем возвращает что-то, и его эффекты не всегда предсказуемы, и на них могут воздействовать внешние силы (не чистая функция). Например, полифил может ничего не делать, потому что он обнаруживает, что включаемая им функция уже поддерживается браузером.
Примеры побочных эффектов:
- Угловые привязки к глобальному
window
объект, но ничего не экспортирует. - Побочным эффектом является полизаполнение, которое включает функции ES6 в браузерах, которые их не поддерживают, например, заполнение в виде бабеля.
- Многие плагины jQuery присоединяются к глобальному объекту jQuery.
- Аналитические модули, которые работают в фоновом режиме, отслеживают взаимодействие с пользователем и отправляют данные на сервер.
- Импорт CSS в веб-пакете может считаться побочным эффектом, если вы не используете модули CSS.
Вот пример:
//a.js
function print1()
{
console.log("export print1 is working");
}
function print2()
{
console.log("non-export print2 is working");
}
print1();
print2();
//b.js
import "a.js";
Когда вы запустите "b.js", вы увидите напечатанные сообщения, которые называются
побочные эффекты
,
Рассмотрим ниже в качестве примера кода. когда вы пытаетесь импортировать что-то, он не будет ничего экспортировать, но будет делать много вещей и переопределит ваш существующий код (если он у вас есть), так что это побочный эффект.
import Ember from 'ember';
Ember.RSVP.configure('onerror', function(error) {
....
});
app.js:
import './overrides/extra';