2015-09-10 21 views
8

Czy kod w modułach ES6 jest wykonywany za każdym razem, gdy importujemy moduł? Używam webpacka i wygląda na to, że robi dokładnie to.Kod modułu ES6 wykonywany za każdym razem, gdy jest importowany

// FormStore.js 
import sessionActions from "../../session/actions/session"; 

// session.spec.js 
import sessionActions from "../../../src/session/actions/session"; 

This causes the code in the session module to be executed twice 
+1

Nie, moduły są tworzone wystąpienia tylko raz. Czy możesz pokazać przykład? – Bergi

+0

Wygląda na to, że dzieje się tak tylko wtedy, gdy przeprowadzę testy przez karmę. To trochę dziwne – ppoliani

+0

Czy możesz opublikować [MCVE] (http://stackoverflow.com/help/mcve)? – Bergi

Odpowiedz

0

Nie znam dokładnie odpowiedzi, ale podejrzewam, że ma to związek z karmą. Myślę, że wynika to z posiadania dwóch różnych pakietów.

W karma.config

preprocessors: { 
    "client/specs/index.ts": ["webpack"], 
    "client/specs/**/*spec.ts": ["webpack"] 
}, 

webpack: { 
    entry: { 
     index: "./client/src/index.tsx", 
     vendor: [] 
    } 
}, 

Zasadniczo, naprawdę nie trzeba dodać punkt wejścia index, ponieważ będzie to prawdopodobnie utworzyć dodatkową paczkę.

0
  1. Czy chcesz, aby kod był wykonywany po zaimportowaniu? Jeśli w pliku/session/actions/session znajduje się eksportowane wywołanie funkcji, a nie deklaracja funkcji, zostanie ono wywołane po zaimportowaniu do dowolnego utworzonego pakietu. Możesz importować różne moduły w różnych plikach.

  2. Jeśli używasz karma-webpack się usage

mówi, że

webpack: { 
     // karma watches the test entry points 
     // (you don't need to specify the entry option) 
     // webpack watches dependencies 

     // webpack configuration 
    }, 
0

Współpracownik przeżywa ten sam problem dzisiaj- problem wydawał się być spowodowane przez jeden z dwóch importu pakiet, ale każdy import odwołuje się do pakietu za pomocą innej ścieżki. Wydaje się, że robisz to samo:

Czy import w pliku session.spec.js można zaimportować przy użyciu tej samej ścieżki? Jeśli nie jest to opcja ze względu na względne położenie plików, można skonfigurować moduł ładujący modułu, aby uzyskać aliasy (używając na przykładlub path). Nie jestem jednak pewien, czy jest to opcja w twoim środowisku.

Patrz: https://github.com/systemjs/systemjs/blob/master/docs/config-api.md#map dla jak to zrobić przy użyciu system.js

Powiązane problemy