Импорт es6 для эффектов побочных эффектов

Я читал оператор импорта es6 ссылка на MDN. Синтаксис:

import "my-module";

импортирует весь модуль только для побочных эффектов, не импортируя никаких привязок. Я не уверен, что означает побочные эффекты. Я использую angular, говоря import "angular". Angular привязывается к окну, но не возвращает объект. Поэтому я не уверен, что это будет вызвано как побочный эффект.

Ответ 1

Когда вам нужно импортировать что-то, что ничего не экспортирует, а делает что-то еще, это только модуль с побочным эффектом. Вы импортируете его только для его инициализации.

Чистые и не чистые модули

Если вы думаете о модулях как о функциях, модуль, который влияет только на объем, экспортируя его содержимое, похож на функцию, которая всегда возвращает одно и то же (чистая функция без параметров). Независимо от того, сколько раз вы будете импортировать реакцию 15.01, вы всегда получите объект, который содержит те же методы.

Модуль с побочными эффектами - это тот, который изменяет область действия другими способами, а затем возвращает что-то, и это эффекты не всегда предсказуемы и могут быть затронуты внешними силами (нечистая функция). Например, polyfill может ничего не делать, поскольку обнаруживает, что функция, которую он включает, уже поддерживается браузером.

Примеры побочных эффектов:

  • Angular привязывается к глобальному объекту window, но не экспортирует что-нибудь.
  • A polyfill, который позволяет использовать функции ES6 в браузерах, которые не поддерживайте их, например babel polyfill является побочным эффектом.
  • Многие плагины jQuery присоединяются к глобальному объекту jQuery.
  • Аналитические модули, которые работают в фоновом режиме, контролируют взаимодействие с пользователем и отправляют данные на сервер.
  • Импорт CSS в webpack можно считать побочным эффектом, если вы не используете CSS-модули.

Ответ 2

Вот пример:

//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", вы увидите печатные сообщения, которые называются

побочные эффекты

.

Ответ 3

Рассмотрим ниже как пример кода. поскольку вы пытаетесь импортировать что-то, он не будет экспортировать ничего, кроме многих вещей, и переопределяет существующий код (если есть), так что побочный эффект.

import Ember from 'ember';
Ember.RSVP.configure('onerror', function(error) {
    ....
});

app.js:

import './overrides/extra';

Ответ 4

"Побочные эффекты" могут означать много чего. Это может быть изменение глобальных переменных, возможно, это использование некоторых API среды (например, запись в файл в Node.js или вызов Ajax в браузере).