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

#javascript #module

#javascript #импорт #ecmascript-6

Вопрос:

Я читал ссылку на инструкцию импорта es6 в MDN. Синтаксис:

 import "my-module";
  

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

Ответ №1:

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

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

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

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

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

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

Ответ №2:

Вот пример:

 //a.js
export 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», вы увидите печатные сообщения, которые вызываются side effects .

Ответ №3:

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

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

app.js:

 import './overrides/extra';