inklusive js-Dateien mit html-und node.js
Ich trete messaging via websockets zwischen einem HTML5-client und-server läuft auf node.js. Natürlich wählte ich JSON als Nachrichtenformat und als solche angelegt gängige javascript-code, der Definition der verschiedenen Inhalte von Nachrichten-Typen und Transformationen. Der javascript-code ist geteilt zwischen den beiden Projekten.
Habe ich meine web-client wie einem git Projekt und meinem server ein weiteres git-Projekt. Teils, weil ich bin mit phonegap zu bauen, die einen webkit-basierten client für verschiedene touch-basierte Umgebungen. Es ist auch eine schöne Trennung der verschiedenen Logik.
Teilen die gemeinsame code, den ich erstellt ein separates Projekt für die gemeinsame Logik und verwendet git die Teilprojekte zu 'import' den code in die beiden anderen Projekte.
Nun dies funktioniert gut für die html5-basierten Projekt, wie kann ich nur das folgende tun, um den code:
<script src="common/js/comms.js" type="text/javascript"></script>
Jedoch mit Knoten-ich habe Probleme versuchen, um den code zu erhalten. um den code zu erhalten, habe ich am Ende machen die folgenden:
var fs = require('fs');
eval(fs.readFileSync('./common/js/comms.js').toString());
Während der Ansatz, den ich genommen habe funktioniert, ich habe bemerkt, dass Sie begann sehr chaotisch, wenn ich die Abhängigkeiten (wie in, ich brauche x.js, y.js und x.js wenn ich eine will.js), und ich muss es tun, für jeden einzelnen node.js js-Datei, die möchte, dass auf jede dieser Personen.
Ich bin mir auch nicht sicher mit der eval
Ansatz. Ich habe nicht eine Frage der Sicherheit, aber ich möchte den strikten Modus und es ist mein Verständnis, dass eval und strict-Modus gehen zusammen wie öl und Wasser.
Meine Frage ist also, was ist die beste Methode, um gemeinsame js-Dateien zwischen html-Projekte und node.js Projekte? Ich würde lieber etwas, das folgt streng.
Sollte ich beachten, dass, während es gibt mehrere Fragen, die irgendwie um dieses Thema, ich konnte keine finden, die den spezifischen Themen, die ich aufgreife. Ich sollte auch hinzufügen, dass ich nicht wollen, zu 'dienen' die Dateien aus dem "server". Der HTML5-client ist 'standalone'.
Zu klären, was ich in den 'common js-Dateien' ist so etwas wie die folgenden:
var Comms = function (options) {
...
}
In HTML5 kann ich dann einfach Referenz ist über new Comms()
, das ist, was ich Sehnsucht zu tun node.js wie gut.
- möglich dup stackoverflow.com/questions/7310176/...
- Ja, ich würde sagen, diese Fragen sind sehr ähnlich und ich denke, es ist definitiv antwortet auf seine Frage.
- Wenn nicht, Sie können immer mit grunt concat-Dateien.
- Wenn ich die Exporte in eine js-Datei verwendet, die von html -, werde ich nicht eine Fehlermeldung erhalten, weil die Exporte nicht definiert ist? @mpm löst es nicht mein problem, da es änderungen die js-Datei für die Arbeit mit node.js, die afaict wird dazu führen, dass zu brechen, mit dem html-code.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie recherchiert, wie Node-Module funktionieren? Wenn Sie die Entwicklung, die dieses Muster verwenden, es ist ziemlich einfach zu bedienen
require('./common/js/comms')
auf dem server, während immer noch darunter, es auf Ihrem client.Sollte dieser Artikel Sie in die richtige Richtung: https://caolan.org/posts/writing_for_node_and_the_browser.html
Folgende code ist der code, Tyler verlinkt in seinem Kommentar unten.
Beispiel (example.js):
Den node.js die Verwendung von example.js (app.js):
Den html-Nutzung example.js (index.html):
Die Veränderung durch die OP wurde zu weisen
exports.Example
zuExample
statt, um eine neue Instanz. So ist die node.js Logik verwenden können, die folgenden:Somit die ursprüngliche Frage gelöst ist.
new <modulename>.Comms()
innerhalb der html-Seite der Dinge und node.js Seite der Dinge? In diesem Fall wird die Modul-name fast immer die gleiche wie in der entity-name (als ich mag, Sie zu trennen, alles in separate js-Dateien), so würde ich am Ende mit Dingen wienew Foo.Foo()
undnew Bar.Bar()
? Wenn ja, dann scheint das ziemlich merkwürdig, imho. Gibt es eine Möglichkeit dies zu umgehen?var x = new Example()
. Ich denke, Sie wies mich in die richtige Richtung, jedoch so, danke.Werfen Sie einen Blick auf nodeJS-Module.
Wäre in comm.js:
In den Dateien, die Sie benötigen comm.js
Hoffe, das hilft!
module.exports
verursacht keine Probleme mit der js enthalten ist in der html?