Schreiben eingebetteten Javascript-plugin, Reagieren & Webpack
Ich möchte in der Lage zu bündeln, Reagieren meine app mit Webpack, so dass verteilte Kopien auf ein CDN bezogen werden können, aufgerufen und initialisiert mit ein paar config relevant für einen client.
Nach der Lektüre diese und diese, ich werde mein webpack Eintrag Datei wie folgt:
//... React requires etc.
(() => {
this.MyApp = (config) => {
//some constructor code here
}
MyApp.prototype.init = () => {
ReactDOM.render(<MyReactApp config={MyApp.config} />, someSelector);
}
})();
Die Idee, dass in meinem client, ich kann etwas tun, wie die folgenden:
<script src="./bundle.js" type="text/javascript"></script>
<script type="text/javascript">
MyApp.init({
some: "config"
});
</script>
Und meine MyApp#init
Funktion machen wird, Reagieren meine app in einige container auf dem client.
Bin ich über dieses denken in der richtigen Weise? Gibt es eine einfachere oder effizientere Weg zu gehen über diese?
Mein Fehler ist Uncaught TypeError: Cannot set property 'MyApp' of undefined
, da this
im inneren des IIFE ist undefined
. Ich würde wirklich gerne verstehen, warum dies geschieht und Ratschläge, wie, um es zu beheben.
Vielen Dank im Voraus!
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, ich habe irgendwie eine Lösung gefunden, um diese, wie beschrieben, hier
Wenn ich meine
webpack.config.js
- Datei fügen Sie die folgenden Attribute, die deroutput
Objekt, d.h.Dieser gibt die Datei an, ich bin die Bündelung mit webpack als UMD-Modul, also wenn ich eine Funktion in dieser Datei, und exportieren es...
Kann ich dann in meinem client, tun die folgende.
Und meine Reagieren app rendert.
Wenn jemand denkt, das ist eine alberne Art und Weise, es zu tun, ich würde es gerne hören!
init
Funktion, die Sie könnte ping eine Anfrage zurück, um Ihre server mit den details der client -, dass funktionieren könnte?Sie haben Gehäuse um Ihre Klasse.
Anwendung exportiert werden soll oder Sie an den globalen window-Objekts, bevor Sie nennen mag.
In Ihrer situation, die Sie eigentlich nicht aufrufende Anwendung.init() aber Sie sind Aufruf-Fenster.MyApp.init(), sondern global im Fenster Objekt nicht Objekt MyApp attached to it.
Ich würde es bevorzugen, erstellen von Klassen-und export-Modul export. Erstellen Sie eine Datei nur zum anfügen an das Fenster. Da es nicht als best practice zu befestigen Klassen, um das Fenster wie die.
Können Sie für erweiterte Optionen des Export-Module wie UMC, AMD...