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';
Другие вопросы по тегам