Angenommen, ich habe eine Klasse wie diese (in Typoskript geschrieben) und bündle sie mit Webpack in bundle.js
.
export class EntryPoint {
static run() {
...
}
}
In meine index.html werde ich das Bundle aufnehmen, aber dann möchte ich auch diese statische Methode aufrufen.
<script src="build/bundle.js"></script>
<script>
window.onload = function() {
EntryPoint.run();
}
</script>
Das EntryPoint
ist in diesem Fall jedoch undefiniert. Wie würde ich dann das gebündelte Javascript aus einem anderen Skript aufrufen?
Hinzugefügt : Webpack-Konfigurationsdatei .
var EntryPoint = require('EntryPoint')
in Ihreronload
Methode fehlt .require
könnte so etwas notwendig sein, aber dasselbe wie beim Import unten, heißt esrequire is not defined
. Ich versuche, gebündelte Inhalte aus einfachem Javascript zu verwenden. Würde ich nicht erneut ein Framework benötigen, um es zu verwendenrequire
? Aber ich versuche das zu vermeiden. Hoffe es macht Sinn.Antworten:
Es scheint, dass Sie das Webpack-Bundle als Bibliothek verfügbar machen möchten . Sie können das Webpack so konfigurieren, dass Ihre Bibliothek im globalen Kontext innerhalb einer eigenen Variablen verfügbar gemacht wird
EntryPoint
.Ich kenne TypeScript nicht, daher verwendet das Beispiel stattdessen einfaches JavaScript. Das wichtigste Element hierbei ist jedoch die Webpack-Konfigurationsdatei und insbesondere der
output
Abschnitt:webpack.config.js
index.js
Dann können Sie wie erwartet auf Ihre Bibliotheksmethoden zugreifen:
Überprüfen Sie das Wesentliche mit dem tatsächlichen Code.
quelle
library: ["GlobalAccess", "[name]"],
. Das macht die Variable dann zu einem Objekt mit Mitgliedern für jeden Einstiegspunkt: GlobalAccess.EntryPointFoo, GlobalAccess.EntryPointBar usw.nam run build
dev env using, funktioniert jedoch nichtwebpack-dev-server
. Mein exportierter EntryPoint ist ein leeres Objekt. Irgendwelche Ideen?export function run() {}
frommodule.exports = ...
Ich habe es geschafft, dies ohne weitere
webpack.config.js
Änderungen zumimport
Laufen zu bringen , indem ich einfach die Anweisung verwendet habe, die ich aus meiner Datei main / index.js aufgerufen habe:Als Referenz ist hier meine
weback.config.js
Datei.Anfangs habe ich versucht, dasselbe mit zu erreichen
require
, aber es hat den Modul-Wrapperwindow.EntryPoint
im Gegensatz zur eigentlichen Klasse zugewiesen .quelle
Uncaught SyntaxError: Unexpected token import
. Oder ist Ihrindex.js
auch gebündelt (ich sehe es als Einstiegspunkt, bin mir aber nicht sicher)?Unter meinen Umständen konnte ich eine Funktion aus dem gebündelten JavaScript aus einem anderen Skript aufrufen, indem ich die Funktion beim Erstellen in das Fenster schrieb.
Ich konnte Babel nicht benutzen, also funktionierte das für mich.
quelle
Ich hatte eine ähnliche Herausforderung: Ich wollte ein Bundle für mehrere Seiten innerhalb einer Reise erstellen und wollte, dass jede Seite einen eigenen Einstiegspunkt in den Code hat und kein separates Bundle für jede Seite.
Hier ist mein Ansatz, der Kurt Williams sehr ähnlich ist, aber aus einem etwas anderen Blickwinkel, auch ohne die Webpack-Konfiguration zu ändern:
JourneyMaster.js
Dann ein Beispiel, wie ich diese Methoden am Ende des aufrufe
html
Seite aufrufe:quelle
WEBPACK.CONFIG.JS
1. UMD VERWENDEN
index.html
main.js
2.VAR VERWENDEN
index.html
main.js
3. AMD als Bibliothek verwenden, die wir mögen (für diejenigen, die lib machen wollen)
quelle
App.ts:
mypage.html:
quelle