2015-12-14 12 views
5

Reaguj z Babel. Mam to zamieszanie z importami i module.exports. Zakładam, że babel podczas konwersji kodu ES6 na ES5 konwertuje import i eksport odpowiednio na require i module.exports.Module.exports and es6 Import

Jeśli wyeksportuję funkcję z jednego modułu i zaimportuję funkcję do innego modułu, kod zostanie wykonany poprawnie. Ale jeśli wyeksportuję funkcję z module.exports i zaimportuję używając "importu", błąd zostanie zgłoszony w czasie wykonywania, mówiąc, że nie jest funkcją.

Przygotowałem przykład.

Użyłem babel z presetem es2015 do trans-kompilacji. To daje mi następujący błąd

Uncaught TypeError: (0 , _animals.Tiger) is not a function

Ale jeśli usunąć module.exports = Tiger; I zastąpić go export { Tiger }; To działa dobrze.

Czego tu brakuje?

EDYTOWANIE: Używam browserify jako modułu bundler.

+0

Czy spojrzałeś na wyjście Babel? Patrząc na transpiled źródło 'Tiger.js' powie Ci od razu, dlaczego to nie działa. Krótko mówiąc: trzymaj się jednego systemu modułów lub użyj modułu bundlerowego, takiego jak pakiet internetowy, który zajmie się niespójnościami. – GJK

+0

Przykro mi to wspomnieć Używam browserify jako moduł bundler – Nani

Odpowiedz

2

export { Tiger } będzie odpowiednikiem module.exports.Tiger = Tiger. Odwrotnie, module.exports = Tiger będzie odpowiednikiem export default Tiger. Więc kiedy używasz module.exports = Tiger, a następnie próbujesz import { Tiger } from './animals', efektywnie pytasz o numer Tiger.Tiger.

+0

, więc co byłoby właściwe oświadczenie import tutaj? czy to po prostu "import Tigera z"./animals''? –

+0

Wierzę, że tak, zakładając, że nie chcesz zmienić tiger.js –

Powiązane problemy