web-dev-qa-db-fra.com

importation es6 pour les effets secondaires

Je lisais la déclaration d'importation es6 référence sur MDN . La syntaxe:

import "my-module";

importera un module entier pour les effets secondaires uniquement, sans importer de liaisons. Je ne sais pas ce que les effets secondaires signifient. J'utilise avec angulaire en disant import "angular". Angular se lie à la fenêtre mais ne renvoie pas d'objet. Je ne suis donc pas sûr que cela soit appelé exactement comme effet secondaire.

Lorsque vous devez importer quelque chose qui n'exporte rien, mais fait autre chose, il s'agit uniquement d'un module d'effets secondaires. Vous ne l'importez que pour l'initialiser.

Modules purs et non purs

Si vous considérez les modules comme des fonctions, un module qui n'affecte la portée qu'en exportant son contenu est comme une fonction qui renvoie toujours la même chose (une fonction pure sans paramètres). Peu importe combien de fois vous importerez React 15.01, vous obtiendrez toujours un objet qui contient les mêmes méthodes.

Un module avec des effets secondaires est un module qui modifie la portée par d'autres moyens, puis renvoie quelque chose, et ses effets ne sont pas toujours prévisibles et peuvent être affectés par des forces extérieures (fonction non pure). Un polyfill, par exemple, pourrait ne rien faire, car il constate que la fonctionnalité qu'il active est déjà prise en charge par le navigateur.

Exemples d'effets secondaires:

  • Angular se lie à l'objet global window, mais n'exporte rien.
  • Un polyfill qui active les fonctionnalités ES6 dans les navigateurs qui ne les prennent pas en charge, comme babel polyfill est un effet secondaire.
  • De nombreux plugins jQuery s'attachent à l'objet jQuery global.
  • Modules d'analyse qui s'exécutent en arrière-plan, surveillent l'interaction des utilisateurs et envoient les données à un serveur.
  • L'importation de CSS dans le webpack peut être considérée comme un effet secondaire si vous n'utilisez pas de modules CSS.
27
Ori Drori

Voici un exemple:

//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";

Lorsque vous exécutez "b.js", vous verrez les messages imprimés, appelés

effets secondaires

.

10
derek

Considérez ci-dessous comme un exemple de code. lorsque vous essayez d'importer quelque chose, il n'exportera rien mais fera beaucoup de choses et remplacera votre code existant (si vous l'avez), c'est donc l'effet secondaire.

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

app.js:

import './overrides/extra';
2
Farhan Ansari