Also schreibe ich eine Anwendung mit der Kombination aus Knoten / Express + Jade.
Ich habe client.js
, die auf den Client geladen ist. In dieser Datei habe ich Code, der Funktionen aus anderen JavaScript-Dateien aufruft. Mein Versuch war zu verwenden
var m = require('./messages');
um den Inhalt von messages.js
(genau wie ich es auf der Serverseite tun) und später Funktionen aus dieser Datei aufzurufen. Ist require
jedoch nicht auf der Clientseite definiert und löst einen Fehler des Formulars aus Uncaught ReferenceError: require is not defined
.
Diese anderen JS-Dateien werden ebenfalls zur Laufzeit auf dem Client geladen, da ich die Links in der Kopfzeile der Webseite platziere. Der Client kennt also alle Funktionen, die aus diesen anderen Dateien exportiert werden.
Wie rufe ich diese Funktionen aus diesen anderen JS-Dateien (z. B. messages.js
) in der Hauptdatei auf client.js
, die den Socket für den Server öffnet?
<script src="messages.js"></script>
rufst du sie nicht einfach an und rufst sie danach an?--require
Option von browserifyrequire()
auf der Client-Seite definiert wird. Siehe: lincolnloop.com/blog/speedy-browserifying-multiple-bundlesAntworten:
Dies liegt daran,
require()
dass das browser- / clientseitige JavaScript nicht vorhanden ist.Jetzt müssen Sie einige Entscheidungen bezüglich Ihrer clientseitigen JavaScript-Skriptverwaltung treffen.
Sie haben drei Möglichkeiten:
<script>
Tag.Zu den clientseitigen CommonJS -Implementierungen gehören:
(Die meisten von ihnen erfordern vor der Bereitstellung einen Erstellungsschritt.)
Sie können mehr über meinen Vergleich von Browserify mit (veralteter) Komponente lesen .
AMD- Implementierungen umfassen:
Beachten Sie, dass Sie bei Ihrer Suche nach der richtigen Option etwas über Bower lesen werden . Bower ist nur für Paketabhängigkeiten gedacht und nicht für Moduldefinitionen wie CommonJS und AMD geeignet.
Hoffe das hilft einigen.
quelle
<script>
Tags zum Importieren einer React-Klasse ohne Verwendung eines nodeJs-Paketmanagers erhalten?Ich komme aus einer Elektronenumgebung, in der ich IPC-Kommunikation zwischen einem Renderer-Prozess und dem Hauptprozess benötige. Der Renderer-Prozess befindet sich in einer HTML-Datei zwischen Skript-Tags und generiert denselben Fehler. Die Linie
löst den Uncaught ReferenceError aus: require ist nicht definiert
Ich konnte dies umgehen, indem ich die Knotenintegration als true angab, als das Browserfenster (in das diese HTML-Datei eingebettet ist) ursprünglich im Hauptprozess erstellt wurde.
Das hat das Problem für mich gelöst. Die Lösung wurde hier vorgeschlagen . Hoffe das hilft jemand anderem. Prost.
quelle
ES6: In HTML enthalten Sie die Haupt-JS-Datei mit dem Attribut
type="module"
( Browser-Unterstützung ):Und in der
script.js
Datei enthalten Sie eine andere Datei wie diese:In der enthaltenen Datei (
module.js
) müssen Sie die Funktion / Klasse exportieren , die Sie importieren möchtenArbeitsbeispiel hier .
quelle
val
zum Fensterobjekt setzenwindow.val = val
. Hier ist Plunker: Plunker: plnkr.co/edit/aDyjyMxO1PdNaFh7ctBT?p=preview - diese Lösung funktioniertIn meinem Fall habe ich eine andere Lösung verwendet.
Da das Projekt keine CommonJs erfordert und ES3-kompatibel sein muss (Module werden nicht unterstützt), müssen Sie lediglich alle Export- und Importanweisungen aus Ihrem Code entfernen , da Ihre tsconfig keine enthält
Verwenden Sie jedoch Import- und Exportanweisungen in Ihren referenzierten Dateien
Der endgültig generierte Code enthält immer (zumindest für Typoskript 3.0) solche Zeilen
quelle
Selbst wenn dies nicht funktioniert, ist browserify meiner Meinung nach die beste Lösung:
quelle
Das hat bei mir funktioniert
<script data-main="your-Scrpt.js" src="require.js"></script>
Code!
Verwenden Sie: -> require (['moudle-name']) in "your-script.js"
nicht erforderlich ('Moudle-Name')const {ipcRenderer} = erfordern (['Elektron'])
Nicht: const {ipcRenderer} = erfordern ('Elektron')
quelle