Was importiert Modul aus 'Modul' importieren, wenn kein Standard-Export definiert ist und warum unterscheidet es sich von Import * als Modul?

8

Ich bin ziemlich neu in JavaScript und habe kürzlich mit Importen gekämpft. Es gab eine Sache, in die ich mich nicht einwickeln kann.

In älteren Knotenmodulen (meist diejenigen, die das Licht vor ES6 sehen), die mit dem npm installiert werden können, wie zB express , ist normalerweise kein Standardexport definiert.

Meine IDE (WebStorm) markiert die folgende Zeile mit dem Standard-Export wird nicht in der Benachrichtigung des importierten Moduls deklariert.

%Vor%

Diese Nachricht kann umgangen werden, indem Sie versuchen, das gesamte Modul mithilfe von

als Alias ​​zu importieren %Vor%

sagt implizit zu meiner IDE, alles nur zu importieren und es mit express zu benennen, aber dies führt zu einem express ist kein funktion Fehler beim Versuch, die Anwendung in der folgenden Zeile zu instanziieren.

%Vor%

Der Original-Import (ohne Alias) funktioniert natürlich.

Was genau wird mit der import-Anweisung ohne den Alias ​​importiert, wenn kein Standard-Export definiert ist? Ich würde denken, dass es das ganze Modul ist, aber es scheint nicht so.

    
David Packer 20.02.2016, 17:30
quelle

1 Antwort

6
  

Was importiert import Module from 'module' , wenn kein Standard-Export definiert ist?

Nichts. In der Tat wird das Modul instanziieren eine SyntaxError ausgeben, wenn etwas importiert wird wird nicht mehrfach aus dem importierten Modul exportiert oder exportiert.

  

Warum unterscheidet es sich von import * as Module ?

Weil import * nur ein Modul-Namespace-Objekt das hat die Exporte als Eigenschaften. Wenn Sie nichts exportieren, wird es ein leeres Objekt sein.

  

In älteren, vor ES6-Knoten vorhandenen Modulen ist normalerweise kein Standard-Export definiert.

Dies bedeutet, dass Sie sie nicht als ES6-Modul importieren können. Ihre IDE scheint dies jedoch zu erwarten und gibt die Warnung auf.

Was passiert also, wenn Sie in einer import -Deklaration auf sie verweisen? Ihr Modullader könnte damit etwas anfangen und HostResolveImportedModule gibt einen Moduldatensatz zurück, der kein Quelltext "ES6-Modul" -Aufzeichnung - dh es könnte etwas umgesetzt werden -abhängig von CommonJS-Modulen.

    
Bergi 23.02.2016, 17:50
quelle

Tags und Links