y compris les fichiers js avec html et node.js
Je suis l'exécution de messagerie via les websockets entre un HTML5 client et le serveur en cours d'exécution sur node.js. Naturellement, j'ai choisi JSON comme format de message et, comme telle, créé en commun du code javascript, de définir les divers messages de types de contenu et des opérations de transformation. Le code javascript est partagé entre les deux projets.
J'ai créé mon client web comme un projet git et mon serveur comme un autre projet git. En partie parce que je suis en utilisant phonegap pour construire un basé sur webkit client pour les différents environnements. C'est aussi une belle séparation des différentes logique.
À part de la commune code que j'ai créé un projet distinct pour la logique commune et utilisé git de sous-projets à "importer" le code dans les deux autres projets.
Maintenant cela fonctionne très bien pour le html5 projet basé sur, comme je peux le faire à la suite d'inclure le code:
<script src="common/js/comms.js" type="text/javascript"></script>
Cependant avec le noeud, j'ai eu des problèmes en essayant d'obtenir le code. pour obtenir le code, j'ai fini par faire ce qui suit:
var fs = require('fs');
eval(fs.readFileSync('./common/js/comms.js').toString());
Tandis que l'approche que j'ai pris œuvres, j'ai remarqué qu'il commence à faire très salissant quand j'ai des dépendances (comme dans l', j'ai besoin de x.js, y.js et x.js si je veux une.js), et je dois le faire pour chaque node.js fichier js qui souhaite utiliser l'une de ces entités.
Je ne suis pas à l'aise à l'aide de la eval
approche. Je n'ai pas de problème de sécurité avec elle, bien que je voudrais utiliser le mode strict et c'est ma compréhension que eval et le mode strict vont ensemble comme l'huile et l'eau.
Donc ma question est, quelle est la meilleure méthode pour prévoir un partage des fichiers js entre html projets et node.js les projets? Je préfère quelque chose qui suit stricte.
Je note qu'il y a plusieurs questions qui sont un peu autour de ce thème, je ne pouvais pas trouver tout pour régler les problèmes que j'élève. Je dois aussi ajouter que je ne souhaite pas "servir" les fichiers à partir du 'serveur'. Le HTML5 client 'autonome'.
Pour préciser, ce que j'ai dans la commune, fichiers js' est quelque chose comme ce qui suit:
var Comms = function (options) {
...
}
En HTML5, je peux simplement référence est via new Comms()
, qui est ce que j'ai envie de faire dans node.js ainsi.
Oui, je dirais que ces questions sont très similaires et je pense que c'certainement des réponses à ses questions.
Si pas, vous pouvez toujours utiliser grunt à concat les fichiers.
Si j'utilise les exportations dans un fichier js utilisé par html, vais-je pas une erreur parce que les exportations n'est pas défini? @mpm ça ne résout pas mon problème car il modifie le fichier js de travailler avec node.js qui afaict va l'amener à rompre avec le code html.
OriginalL'auteur Metalskin | 2013-01-25
Vous devez vous connecter pour publier un commentaire.
Avez-vous étudié la façon dont Nœud modules de travail? Si vous êtes en développement à l'aide de ce modèle, il est assez simple à utiliser
require('./common/js/comms')
sur le serveur, tout en comptant toujours sur votre client.Cet article devraient vous diriger dans la bonne direction: https://caolan.org/posts/writing_for_node_and_the_browser.html
Voici le code que Tyler liés à la dans ses commentaires ci-dessous.
L'exemple (example.js):
L'node.js l'utilisation de example.js (app.js):
Le code html de l'utilisation de example.js (index.html):
Le changement par l'OP était d'attribuer
exports.Example
àExample
au lieu d'une nouvelle instance. Ainsi, l'node.js la logique peut utiliser les éléments suivants:Donc la question d'origine est résolu.
new <modulename>.Comms()
dans le code html côté des choses et node.js côté des choses? Dans ce cas, le nom du module serait presque toujours le même que le nom de l'entité (comme j'aime à les séparer tout en plusieurs fichiers js), donc je me avec des choses commenew Foo.Foo()
etnew Bar.Bar()
? Si oui, alors cela semble un peu bizarre à mon humble avis. Est-il un moyen de contourner ce problème?Voici une pension avec un petit exemple: github.com/TylerLH/shared_module_example -- example.js est le module et app.js est le Node.js script qui l'exige. index.html utilise juste une simple balise de script pour inclure le module qui est accessible dans l'espace de noms global. Vous pouvez également attendre pour instancier si vous voulez passer de certaines options.
merci pour la rapidité exemple, mais il ne fonctionne pas pour moi, que je veux être en mesure d'utiliser
var x = new Example()
. Je pense que vous l'avez fait à moi dans la bonne direction, cependant, donc merci.Compris, merci pour votre réponse. Mon problème a été de comprendre comment l'ensemble des exportations et de l'instruction d'importation dans le nœud se comporte. encore une fois, merci Tyler, il a été très utile. Btw, je suis en train de modifier votre réponse à inclure votre code. 🙂
Ravi de vous aider. Merci pour le modifier. Amusez-vous bien!
OriginalL'auteur Tyler Hughes
Prendre un coup d'oeil à les modules nodeJS.
Serait dans comm.js:
Dans les fichiers dont vous avez besoin comm.js
Espère que ça aide!
module.exports
provoque pas de problèmes avec le js qui est inclus dans le html?tester si le module est défini en premier , puis les exporter votre module , c'est le chemin à parcourir
NodeJS s'exécute sur le serveur. Script à l'intérieur des fichiers HTML s'exécute sur le client. Vous n'incluez pas le code du serveur sur le client. Au lieu de cela, vous pouvez envoyer des messages au serveur de code de la part du client, et d'interpréter les résultats.
une approche commune au sein de la programmation est à la réutilisation de code. Lorsque le code est commun entre les différents projets, généralement, l'approche consiste à écrire des bibliothèques. Il n'a pas d'importance si l'on est un client et un serveur, le code commun doivent être réutilisés et donc partagés entre chaque projet. Sinon, nous créer une instabilité laquelle quelqu'un oublie de mettre à jour le code en x quand il a été mis à jour en y.
Pas besoin de mentionner SEC, vous avez demandé si le module.les exportations provoque des problèmes dans le code html, et j'ai répondu "oui", parce que module.les exportations provient de nœud (code serveur).
OriginalL'auteur talabes