190 votes

Comment charger mon script dans le REPL node.js ?

J'ai un script foo.js qui contient quelques fonctions avec lesquelles je veux jouer dans le REPL.

Existe-t-il un moyen de faire en sorte que node exécute mon script et saute ensuite dans un REPL avec tous les globaux déclarés, comme je peux le faire avec python -i foo.py ou ghci foo.hs ?

239voto

vossad01 Points 1568

Il n'y a toujours rien d'intégré pour fournir la fonctionnalité exacte que vous décrivez. Cependant, une alternative à l'utilisation de require pour utiliser le .load commande dans le REPL, comme tel :

.load foo.js

Il charge le fichier ligne par ligne, comme si vous l'aviez tapé dans le REPL. Contrairement à require cela pollue l'historique du REPL avec les commandes que vous avez chargées. Cependant, elle a l'avantage d'être reproductible car elle n'est pas mise en cache comme la commande require .

La meilleure solution pour vous dépend de votre cas d'utilisation.


Edit : Son applicabilité est limitée parce qu'elle ne fonctionne pas en mode strict, mais trois ans plus tard, j'ai appris que si votre script n'a pas 'use strict' vous pouvez utiliser eval pour charger votre script sans polluer l'historique du REPL :

var fs = require('fs');
eval(fs.readFileSync('foo.js').toString())

70voto

J'utilise toujours cette commande

node -i -e "$(< yourScript.js)"

fonctionne exactement comme en Python, sans aucun paquetage.

2 votes

Quelqu'un sait-il comment faire pour que cela fonctionne dans cmd de Windows ? j'ai réussi à le faire fonctionner dans bash, mais pas dans Windows.

1 votes

@Sharpiro : Si vous installez Git, vous avez la possibilité d'installer un mini-UNIX dans votre PC Windows. Je veux dire la distribution normale de Git pour Windows.

0 votes

La seule chose qui est ennuyeuse à ce sujet est que Node.js imprimera l'invite repl et puis exécuter votre script, de sorte que toute sortie soit bloquée après l'invite. stackoverflow.com/a/45893494/3538165 n'a pas ce problème mais pour cette solution les fonctions doivent être assignées explicitement aux variables pour se retrouver dans l'espace de nom repl, donc pas très bon non plus.

13voto

dc2 Points 2357

J'ai fait Vorpal.js qui gère ce problème en transformant votre ajout de nœuds en une CLI interactive. Il prend en charge une extension REPL, qui vous place dans un REPL dans le contexte de votre application en cours d'exécution.

var vorpal = require('vorpal')();
var repl = require('vorpal-repl');

vorpal
  .delimiter('myapp>')
  .use(repl)
  .show()
  .parse(process.argv); 

Ensuite, vous pouvez lancer l'application et elle se placera dans un REPL.

$ node myapp.js repl
myapp> repl:

12voto

Ashish Chaudhary Points 630

Une autre solution consiste à définir ces fonctions comme globales.

global.helloWorld = function() { console.log("Hello World"); }

Ensuite, préchargez le fichier dans le REPL comme :

node -r ./file.js

Alors la fonction helloWorld sont accessibles directement dans le REPL.

11voto

Eliot Points 593

Voici une version de la fonction bash La réponse de George :

noderepl() {
    FILE_CONTENTS="$(< $1 )"
    node -i -e "$FILE_CONTENTS"
}

Si vous mettez cela dans votre ~/.bash_profile vous pouvez l'utiliser comme un alias, par exemple :

noderepl foo.js

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X