Exécutez un certain code puis passez en nœud interactif

Existe-t-il un moyen d'exécuter un certain code (dans un fichier ou d'une chaîne, n'a pas vraiment d'importance) avant de passer en mode interactif dans node.js?

Par exemple, si je crée un script __preamble__.js qui contient:

 console.log("preamble executed! poor guy!"); 

Et un utilisateur tape le node __preamble__.js ils obtiennent cette sortie:

 preamble executed! poor guy! > [interactive mode] 

Vraiment ancienne question mais …

Je cherchais quelque chose de semblable, je crois, et j'ai découvert cela. Vous pouvez ouvrir le REPL ( node saisie sur votre terminal), puis charger un fichier. Comme ceci: .load ./script.js . Appuyez sur Entrée et le contenu du fichier sera exécuté. Maintenant tout créé (objet, variable, fonction) dans votre script sera disponible.

Par exemple:

 // script.js var y = { name: 'obj', status: true }; var x = setInterval(function () { console.log('As time goes by...'); }, 5000); 

Sur le REPL:

 //REPL .load ./script.js 

Maintenant, vous tapez sur le REPL et interagissez avec le "code vivant". Vous pouvez console.log(y) ou clearInterval(x) ;

Ce sera un peu bizarre, car "A mesure que le temps passe …" continue à apparaître toutes les cinq secondes (ou plus). Mais ça fonctionnera!

Vous pouvez commencer un nouveau compte dans votre logiciel Node assez facilement:

 var repl = require("repl"); var r = repl.start("node> "); r.context.pause = pauseHTTP; r.context.resume = resumeHTTP; 

À partir de REPL, vous pouvez appeler pause() ou resume() et exécuter les fonctions pauseHTTP() et resumeHTTP() directement. Assignez simplement ce que vous souhaitez exposer au membre context du REPL.

J'ai récemment lancé un projet pour créer un shell interactif avancé pour Node et les langages associés comme CoffeeScript. L'une des fonctionnalités est de charger un fichier ou une chaîne dans le contexte de l'interpréteur lors du démarrage qui prend en compte la langue chargée.

http://danielgtaylor.github.com/nesh/

Exemples:

 # Load a string (Javascript) nesh -e 'var hello = function (name) { return "Hello, " + name; };' # Load a string (CoffeeScript) nesh -c -e 'hello = (name) -> "Hello, #{name}"' # Load a file (Javascript) nesh -e hello.js # Load a file (CoffeeScript) nesh -c -e hello.coffee 

Ensuite, dans l'interprète, vous pouvez accéder à la fonction hello .

Ceci peut être réalisé avec la version actuelle de NodeJS ( 5.9.1 ):

 $ node -i -e "console.log('A message')" 

L'indicateur -e évalue la chaîne et l'indicateur -i commence le mode interactif.

Vous pouvez en savoir plus sur la demande de tirage référencée

node -r vous permet d'exiger un module lorsque REPL démarre. NODE_PATH définit le chemin de recherche du module. Ainsi, vous pouvez exécuter quelque chose comme ça sur votre ligne de commande:

NODE_PATH=. node -r myscript.js

Cela devrait vous mettre dans un REPL avec votre script chargé.

Modifier: ignorez cela. @ Jaywalking101 réponse est beaucoup mieux. Faites cela à la place.

Si vous exécutez à l'intérieur d'un shell Bash (Linux, OS X, Cygwin), puis

 cat __preamble__.js - | node -i 

marchera. Cela éveille beaucoup de bruit lors de l'évaluation de chaque ligne de préambule .js, mais après les mots-clés, vous atterris dans un shell interactif dans le contexte que vous voulez.

(Le '-' à 'chat' spécifie simplement "utiliser l'entrée standard".)

Une réponse similaire à @slacktracer, mais si vous utilisez bien le plan global dans votre script, vous pouvez simplement l' require au lieu de (apprendre et) en utilisant .load .

Exemple lib.js :

 global.x = 123; 

Exemple de session de node :

 $ node > require('./lib') {} > x 123 

Comme un effet secondaire agréable, vous n'avez même pas à faire var x = require('x'); 0 var x = require('x'); 0 dance, comme module.exports reste un objet vide et donc le résultat require ne complètera pas votre écran avec le contenu du module.

Vorpal.js a été construit pour faire tout cela. Il fournit une API pour créer une CLI interactive dans le contexte de votre application.

Il comprend des plugins, et l'un d'eux est Vorpal-REPL . Cela vous permet de taper repl et cela vous déposera dans un REPL dans le contexte de votre application .

Exemple d'implémentation:

 var vorpal = require('vorpal')(); var repl = require('vorpal-repl'); vorpal.use(repl).show(); // Now you do your custom code... // If you want to automatically jump // into REPl mode, just do this: vorpal.exec('repl'); 

C'est tout!

Disclaimer: J'ai écrit Vorpal.

Il n'y a aucun moyen de le faire nativement. Vous pouvez soit entrer le noeud shell interactif du node ou exécuter un script que vous avez le node myScrpt.js . @sarnold a raison, en ce que si vous voulez que pour votre application, vous devrez le faire vous-même, et l'utilisation de la boîte à outils de repli est utile pour ce genre de chose

Nit-tool vous permet de charger un module de noeud dans le repl interactif et d'avoir accès à l'environnement du module interne (contexte de jointure) à des fins de développement

 npm install nit-tool -g