7
votes

Comment puis-je utiliser une bibliothèque JavaScript sur le côté serveur d'une application Nodejs lorsqu'il a été conçu pour exécuter sur le client?

Je plonge dans Nodejs et express (c'est tellement compliqué pour moi) de construire une application Web en temps réel. Pour le moment, j'essaie de comprendre comment je peux utiliser une bibliothèque JavaScript existante sur le côté serveur. Le problème est que la bibliothèque semble être conçue pour fonctionner sur le côté du client et, par conséquent, les instructions ne vous indiquent que comment l'utiliser sur le côté du client. La bibliothèque dont je parle peut être trouvée ici ...

https://github.com/replit/ jsrepl

questions:

  1. Étant donné qu'une application Web Nodejs est construite sur JavaScript, est-il juste de dire que je peux exécuter n'importe quelle bibliothèque JavaScript sans gui sur le côté serveur?
  2. Peut-on offrir des conseils sur la manière dont je peux ajouter cette bibliothèque JSRePL à mon application Express 3.0 d'une manière qui me permet de l'utiliser de la même manière que je voudrais l'utiliser du côté client dans un navigateur? Dois-je modifier le code JSRePL et ajouter "Exportations". aux méthodes que je veux utiliser?

    Signification, du côté serveur, je peux exécuter le code suivant ... xxx

    Merci d'avance pour toute votre sagesse! Je fais de mon mieux pour comprendre tout cela.


1 commentaires

+1 question. Bibliothèque intéressante - Péritier Python JavaScript pur, schéma et interpréteur Lua. Cette bibliothèque vient de crier pour être porté à Node.js


3 Réponses :


1
votes
  1. non. Il y a des choses sur le côté client que vous n'avez pas sur le côté serveur (et inversement): par exemple, le DOM.
  2. Je n'ai jamais travaillé avec jsrepl moi-même, mais en supposant que c'est la plate-forme-agnostique, nécessite () à partir d'un module de noeud devrait être correct. Cependant, il semble y avoir des choses spécifiques à dom.

2 commentaires

est correct. JSREPL ne fonctionnera pas dans un environnement de nœud comme actuellement écrit. Peut-être que cela peut aider, Nodejs.org/api/repl.html .


@ThadDeUsalbers: JSREPL est également capable d'exécuter directement du café, Scheme, Lua et Python, ce n'est pas simplement une simple boucle de replaction comme celle du nœud nœud.



2
votes

Vous pouvez exécuter Phantomjs dans le nœud, qui est un navigateur webkit sans tête. Puis exécutez Jsrepl à l'intérieur de Phantomjs.


0 commentaires

9
votes

C'est donc possible, mais vous avez besoin d'un piratage sérieux afin de le faire fonctionner. Comme ce n'est pas un module de nœud et est écrit depuis le navigateur, car d'autres ont noté, vous avez besoin d'un DOM dans le nœud pour l'exécuter. Heureusement, nous avons le merveilleux jsdom projet qui nous permet de faire exactement cela. Alors, commençons à cette chose.

  • CD code> dans votre projet de nœud (Créez-en un s'il n'y en a pas déjà) LI>
  • Clone Down the jsrepl Repo git clone git: //github.com/replit/jsrepl.git code> li>
  • CD dans JSRePL code> et initialiser les sous-modules Mise à jour de la sous-module git --Init --Recursive code> Li>
  • toujours dans le dossier, exécuté NPM Installez le script café-script code> et NPM INSTALL UGLIFY-JS CODE>, des dépendances qui ne sont mentionnées nulle part dans le repo (UGH). li>
  • Assurez-vous que Java est installé et exécutez cuire le cuisson code>. Après un long processus de compilation de fichiers Java et une telle commande finira et JSRePL sera construit et prêt à partir. LI>
  • Run NPM Installez JSDOM code>, puis nous pouvons commencer à écrire un exemple de fichier li> ul>

    Voici un exemple minimal: p>

    var jsdom = require('jsdom'),
        fs = require('fs'),
        jsrepl = fs.readFileSync('./jsrepl/repl.js', 'utf8');
    
    jsdom.env({
      html: "<script src='jsrepl.js' id='jsrepl-script'></script> ",
      src: [jsrepl],
      done: function(err, window){
        if (err) return console.error(err);
        run_jsrepl.call(window);
      }
    });
    
    function run_jsrepl(){
      console.log(this.JSREPL)
    }
    


0 commentaires