So importieren Sie ein Modul in es6, dass muss selbst aufrufen/Initialisierung der Funktion/Klasse, bevor Sie importiert werden
Ich Frage mich, was ist die beste Vorgehensweise, um ein Modul importieren die Funktion/Klasse in einem anderen Modul, dass das Modul selbst muss invoke/initialisiert seine eigene Funktion/Klasse vor dem Import in ein anderes Modul? Ich weiß nicht, ob ich konnte meine Frage deutlich genug! So sagen wir es in einem Beispiel.
Dies ist mein Modul:
//myModule.js
class MyModule {
constructor() {
//do sth
}
}
let myModule = new MyModule();
Und dies ist, wie ich, wie der import in ein anderes Modul:
import MyModule from './myModule';
Dies tatsächlich funktioniert! Aber wie Sie sehen können, in der myModule.js
Datei, die ich nicht export default
meine MyModule
Klasse, denn das ist nicht die einzige Sache, die geschieht in der myModule.js
Datei! Ich bin auch der Initialisierung der Klasse nach, es zu definieren... (ich weiß selbst, dass wenn ich meine Klasse als export default
die Initialisierung würde immer noch funktionieren, während das Modul importiert wird woanders...)
So, ohne Einstellung nichts für den Export im Modul, oder mit der Einstellung der Klasse export default
funktioniert alles einwandfrei, wenn das Modul importiert wurde woanders... So weit So gut! Aber ich bin auf der Suche nach einem best-practice-wenn es eins gibt!
So, hier sind meine Fragen in Bezug auf solche Fälle:
- Ist es ok, um ein Modul importieren, das nicht irgend etwas für den export?
- Ist setzen wir die Klasse als
export default
, obwohl wir dabei einige weitere Werke außerhalb der Klasse in das Modul (Die Initialisierung der job, das passiert nach der Definition der Klasse)? - Oder vielleicht ist es gut zu tun, die Initialisierung job in einer anderen Funktion und exportieren Sie dann beide, der Klasse und der Funktion, und rufen Sie dann die Funktion für die Initialisierung der job in der importierten Modul?
Vielen Dank an alle! Ich Schätze wirklich jede hilft in Bezug auf diese 🙂
- "denn das ist nicht das einzige, was passiert ist", sollten Sie nicht halten Sie aus (Standard) exportieren nichts.
- Brauchen Sie mehrere Instanzen der Klasse?
- Ich Frage mich, was wenn ich eine factory-Funktion (darin bin ich nicht nur Instanziierung der Klasse, aber auch einige andere Werke), dass ich möchte, dass es selbst aufgerufen. Wie kann ich exportieren, die sich selbst aufrufenden Funktion?
- Generell Frage ich mich, wie können wir exportieren einer sich selbst aufrufenden Funktion?
- Fallen die selbst-Aufruf, ES6-Module sind in sich geschlossene sowieso. Führen Sie einfach Ihre Sachen in der Modul-Ebene-Rahmen, die Ergebnisse exportieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie etwa die anbieten, importieren Sie die Klasse oder die Instanz? Wie:
Damit Sie tun könnten:
Was zu tun ist, depeneds auf, was Sie erreichen möchten mit Ihrem Modul. Wenn Sie möchten, dass Ihre app verwenden einer freigegebenen Instanz von einem
MyModule
Objekt-Klasse, würde Sieexport
undimport
die Instanz wie oben gezeigt. Wenn Sie möchten, erstellen Sie mehrere Instanzen in verschiedenen Kontexten, würden Sie exportieren die Klasse selbst oder eine factory-Funktion zur Rückgabe eines neuen Instanz.Halten es noch mehr zu reinigen, würden Sie halten die Klasse noch in einer separaten Datei und
import
Sie ihn in das Modul, die Bereitstellung der Fabrik/Instanziierung.Update
Zur Beantwortung Ihrer ersten Frage: können Sie
import
Module, die haben keineexport
definiert. Das Modul wird geladen und die entsprechende Logik ausgeführt. Die Sache ist die, dass, solange es nicht ändern globaler Variablen (wiewindow
in web-Entwicklung) es keine Wirkung haben wird, wie alles im Modul passiert innerhalb einer isolierten scope. Wie Sie vielleicht schon erraten haben, dass Module ändern Globale vars ist weit von best practice.//export instance of MyModule directly
mit einige Sachen erledigt werden bevor). Sie wäre nicht in der Lage zu gehen in ein beliebiges argument wenn.export default function() { ... }();
Aber was für einen Sinn würde es machen? Es würde ausgeführt werden, die Zeit, die das Modul importiert wird wie alle anderen Codes in das Modul. Es macht also keinen Unterschied machen, ob Sie Ihren code innerhalb der Funktion oder ausserhalb. Wenn Sie wirklich brauchen einen isolierten Bereich hier, ist es wohl ein Hinweis, dass Sie zu trennen, um den code in ein Modul des eigenen.Vielen Dank Jungs für Eure Antworten. Ich Schätze, dass. Eigentlich hab ich wirklich verwirrt über das Projekt, an dem ich arbeite, so vielleicht konnte ich nicht Ausdrücken, was ich versuche zu tun...
Aber egal, ich Schreibe meine eigenen Antworten auf meine Fragen, vielleicht hat jemand anderes Sie nützlich finden:
Es ist immer eine gute Praxis zu haben, eine
export default
oderexport
für ein Modul, das wir schreiben. Da jeder code in der Regel über einige Resultate, Recht? Also in einem Modul, sollten wir überlegen, was wir erreichen am Ende und dann exportieren. Exportieren Sie Ihre Ausgaben, die Dinge, die Sie erwarten, dass Ihr Modul zu bieten, wenn es sein wird importiert woanders.Wenn Ihr Modul ist eine einzelne Klasse, es ist gut zu
export default
es. Ansonsten, wie ich schon in der ersten Antwort, es hängt alles davon ab, was Sie zu erreichen in Ihrem Modul und was ist Ihre Ergebnisse. Exportieren Sie alle Ergebnisse, utility-Funktionen, etc...Können Sie gerne auch zu tun! Aber zuerst denken Sie über Ihren Fall. Sobald das Modul importiert wird woanders, alle codes in der es ausgeführt wird. Also tun Sie, was Sie gerne tun, und dann exportieren Sie die Ergebnisse am Ende.