2014-06-08 13 views
8

In python c'è una bella funzionalità, python -i. Ad esempio, python -i myprogram.py eseguirà il programma e quindi entrerà nella modalità interattiva, come se avessi incollato l'intero programma nella shell interattiva.Qual è l'analogo node.js di python -i: eseguire e accedere alla modalità interattiva?

Esiste un comando simile in node.js?

+1

L'utilità della riga di comando del nodo ha anche un modificatore '-i' per entrare nella modalità interattiva (ad esempio REPL), ma non funziona se si passano altri argomenti, come un file che si desidera eseguire. –

+4

Possibile duplicato di [esegui del codice e poi passa al nodo interattivo] (https://stackoverflow.com/questions/8549145/execute-some-code-and-then-go-into-interactive-node) – jpaugh

risposta

3

Penso che il nodo eseguibile non consenta di combinare lo -i con altri argomenti di file.

Questa probabilmente non è la soluzione che vorresti leggere. Tuttavia, questo ha funzionato per me. C'è un modulo chiamato REPL che fondamentalmente ti permette di farlo manualmente. Così, mi sono reso conto che avrei potuto creare un wrapper per qualsiasi tipo di file, come segue:

#!/bin/bash 

COMMAND=$(cat <<EOF 
(function(){ 
    var repl = require('repl'); 

    process.stdin.push('.load ${1}\n'); 

    repl.start({ 
     useGlobal:true, 
     ignoreUndefined:true, 
     prompt:'> ' 
    }); 
})(); 
EOF 
) 

node -e "${COMMAND}" 

Supponendo si chiama questo script nodejs, allora posso chiamare questo script facendo qualcosa di simile

nodejs ./demo.js 

Si inizia il REPL programmaticamente e carica lo script in esso. Questo sarebbe equivalente all'apertura manuale di una sessione REPL e quindi eseguire il comando .load <file>.

+0

Questo metodo ha alcuni svantaggi, come ho scoperto. Le variabili locali dallo script non sono disponibili per l'ispezione, ma sono globali. – osa

+0

@SergeyOrshanskiy Ho scritto una nuova versione del programma che carica il tuo script nella sessione corrente invece di richiedere solo il modulo. Questo dovrebbe funzionare. –

2

Documenti a https://nodejs.org/api/cli.html

-r, --require module

precarico il modulo specificato all'avvio.

Seguono le regole di risoluzione dei moduli di(). il modulo può essere un percorso in un file o un nome di modulo nodo.

node -i -r ./myprogram.js

-e, --eval "script"

Valutare il seguente argomento come JavaScript. I moduli che sono predefiniti in REPL possono essere utilizzati anche nello script.

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

Queste caratteristiche sono state aggiunte dal momento che la risposta precedente nel 2014 con le seguenti richieste di trazione.

+0

C'è un modo per accedere al modulo richiesto dal REPL? – Antimony

1

E 'un peccato che il nodo non ha soluzione incorporato per questo. Come menzionato da qui, è possibile precaricare i moduli con l'opzione -r, ma non è ancora possibile accedervi dal REPL, rendendolo un po 'inutile.

Finora la soluzione migliore che ho trovato è quello di fare

cat ./test.js - | node -i 

Dove test.js è il file che si desidera eseguire.Questo lo invia su stdin, come se tu avessi digitato il file tu stesso e poi aspetti ulteriori input. Uno svantaggio è che verrà echo il file e il risultato di ogni riga torna al prompt dei comandi.

Problemi correlati