Ist es möglich, import-Module aus allen Dateien in einem Verzeichnis mit einer wildcard?
Mit ES6, die ich importieren können Sie mehrere Exporte, die aus einer Datei wie dieser:
import {ThingA, ThingB, ThingC} from 'lib/things';
Allerdings gefällt mir die Organisation des mit einem Modul pro Datei. Ich am Ende mit Importen wie diese:
import ThingA from 'lib/things/ThingA';
import ThingB from 'lib/things/ThingB';
import ThingC from 'lib/things/ThingC';
Ich würde gerne in der Lage, dies zu tun:
import {ThingA, ThingB, ThingC} from 'lib/things/*';
oder etwas ähnliches, mit der Konvention verstanden, dass jede Datei enthält einen Standard-export, und jedes Modul den gleichen Namen wie die Datei.
Ist das möglich?
- Dies ist möglich,. Bitte siehe Modul-Dokumentation für babel babeljs.io/docs/lernen-es2015 ... guoted "import {sum, pi} aus "lib/math";". Die akzeptierte Antwort ist nicht mehr gültig. Bitte aktualisieren Sie es.
- Ich glaube nicht, dass Sie die Frage verstehen. In den docs,
lib/math
ist eine Datei mit mehreren Exporten. In meiner Fragelib/math/
ist ein Verzeichnis mit mehreren Dateien, die jeweils ein export. - ok, ich sehe. In diesem Fall Bergischen korrekt ist. Sorry
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass das möglich ist, aber afaik wird die Auflösung des Modul-Namen ist bis zu Modul-Lader so könnte es ein loader-Implementierung unterstützt dies.
Bis dann, man könnte eine Mittelstufe "Modul-Datei" auf
lib/things/index.js
dass nur enthältund es würde Ihnen erlauben, zu tun
index.js
suchen, wie:import ThingA from 'things/ThingA'; export {ThingA as ThingA}; import ThingB from 'things/ThingB'; export {ThingB as ThingB};
. Andere Beschwörungen inindex.js
rührte sich nicht.export * from
sollte funktionieren. Haben Sie versucht…from './ThingA'
oderexport ThingA from …
? Was Modul-loader benutzt du?ThingA
ausThingA
?Nur eine variation auf das Thema, das bereits in der Antwort, aber wie wäre es damit:
In einem
Thing
,In
things/index.js
,Dann zu verbrauchen, all die Dinge, die anderswo,
Oder zu konsumieren, nur einige der Dinge,
index.js
für mich. Ich bin mit SystemJs + Babelexport ThingA from './ThingA'
stattexport {default as ThingA} from './ThingA'
default as ThingA
export ThingA from './ThingA'
wirft syntax-Fehler für die VS Code-JS-validatorexport ThingA from './ThingA'
ist keine gültige syntax, denke ich.Aktuelle Antworten deuten auf eine Problemumgehung, aber es nervte mich, warum dieser nicht existiert, so habe ich einen
babel
- plugin, welches dies tut.Installieren Sie es mit:
dann fügen Sie es zu Ihrem
.babelrc
mit:sehen die repo ausführliche install-info
Dies ermöglicht es Ihnen, dies zu tun:
wieder, die repo enthält weitere Informationen, was genau tut es, aber tut es auf diese Weise vermeidet das erstellen von
index.js
Dateien und geschieht auch zur compile-Zeit zu vermeiden, tunreaddir
s zur Laufzeit.Auch mit einer neueren version können Sie genau das tun wie dein Beispiel:
funktioniert genauso wie die oben genannten.
./lib/things;
und ist es nicht abgeholt wird. Die Probleme, die Sie verursacht, sind lächerlich. Ich habe gerade erlebte situation, wenn man seine Datei mitimport *
macht babel zu Holen hinzugefügte Datei, aber ändern Sie es zurück, bringt das problem zurück, wie es wiederverwendet cache von vor dem Wechsel. Mit Vorsicht zu verwenden.~/.babel.json
die Ursachen dieses seltsame Verhalten. Auch wenn Sie wie ein watcher oder eine heiße reloader speichern Sie die neue Datei, es wird also neu kompiliert mit dem neuen directory-listingbpwc clear-cache
weil webpack und andere build-Prozesse werden immer noch leise cacheGroße gugly muglys! Dies war schwieriger als es sein sollte.
Exportieren, die eine flache Standard -
Dies ist eine großartige Gelegenheit zu nutzen verbreiten (
...
im{ ...Matters, ...Contacts }
unten:Dann laufen babel kompilierten code von der Befehlszeile aus (aus der Projekt-root /):
Export ein Baum-wie Standard
Wenn Sie lieber nicht überschreiben Eigenschaften ändern:
Und die Ausgabe wird sein:
Export mehrere benannte Exporte w/no default
Wenn Sie gewidmet TROCKEN, die syntax sich auf die Einfuhren änderungen:
Diese erstellt 2 genannten Exporte w/no default export. Ändern Sie dann:
Und die Ausgabe:
Importieren, die alle den Namen Exporte
Beachten Sie die destructuring
import { Matters, Contacts } from './collections';
im vorherigen Beispiel.In der Praxis
Gegeben, diese Quelldateien:
Erstellen einer
/myLib/index.js
zu bündeln, bis alle Dateien, die Niederlagen der Zweck des import/export. Es wäre einfacher, alles zu machen, dass weltweit in den ersten Platz, als, um alles global über import - /export über index.js "wrapper-Dateien".Wenn Sie möchten, dass eine bestimmte Datei
import thingA from './myLib/thingA';
in Ihren eigenen Projekten.Schaffung eines "wrapper-Datei" exports für das Modul macht nur Sinn, wenn Sie die Verpackung für npm oder auf einem multi-Jahres-multi-team-Projekt.
Es so weit geschafft? Finden Sie die docs für mehr details.
Auch, yay für Stackoverflow schließlich Unterstützung von drei `s als code-Zaun-markup.
Können Sie async import():
import fs = require('fs');
dann:
Ich habe Sie ein paar mal (insbesondere für Gebäude massive Objekte aufteilen der Daten, die über viele Dateien (z.B. AST-Knoten)), um Sie zu bauen, machte ich einen kleinen script (das habe ich nur Hinzugefügt, npm, so dass jeder kann es verwenden).
Nutzung (derzeit müssen Sie mit babel verwenden Sie die export-Datei):
Erzeugt eine Datei mit:
Dann können Sie nur verbrauchen die Datei:
\` instead of
/) also as an improvment you may want to allow two options like
--filename` &&--dest
zu ermöglichen, customizing, wo die erstellte Datei gespeichert werden soll und unter welcher Bezeichnung. Auch funktioniert nicht mit Dateinamen, die.
(wieuser.model.js
)Nur einen anderen Ansatz zu @Bergi Antwort
Verwendet
Ähnlich der Frage angenommen, aber Sie können Sie skalieren, ohne die Notwendigkeit für das hinzufügen eines neuen Moduls auf die index-Datei jedes mal, wenn Sie erstellen eine:
./modules/moduleA.js
./modules/index.js
./example.js
Dies ist nicht genau das, was Sie gefragt, aber mit dieser Methode kann ich die Iteration durch
componentsList
in meine anderen Dateien und verwenden Sie die Funktion wiecomponentsList.map(...)
das finde ich ziemlich nützlich !Können Sie verlangen, so gut:
Dann nutzen Sie Ihre moduleHolder mit dynamisch geladenen Controller:
wenn Sie nicht exportieren Standard in A, B, C sondern einfach exportieren, {}, dann ist es möglich, dies zu tun
./thing
) und selbst wenn es gab, würde es nicht funktionieren. (Ich habe es versucht und es hat nicht funktioniert.)