traditional servers repl nodejs node how from different based are javascript node.js read-eval-print-loop

javascript - repl - how node based web servers are different from traditional web servers



¿Cómo cargo mi script en el node.js REPL? (10)

Tengo un script foo.js que contiene algunas funciones con las que quiero jugar en REPL.

¿Hay alguna manera de que node ejecute mi script y luego salte a REPL con todos los globales declarados, como puedo con python -i foo.py o ghci foo.hs ?


¿Por qué no cargar el archivo en un nodo interactivo repl?

node -h -e, --eval script evaluate script -i, --interactive always enter the REPL even if stdin node -e ''var client = require("./build/main/index.js"); console.log("Use `client` in repl")'' -i

Luego puede agregar a scripts package.json

"repl": "node -e ''var client = require(/"./build/main/index.js/"); console.log(/"Use `client` in repl/")'' -i",

probado usando el nodo v8.1.2


Actualmente no puedes hacer eso directamente, pero puedes mylib = require(''./foo.js'') en REPL. Recuerde que los métodos se exportan, no se declaran como globales.


Aquí hay una versión de la función de bash de la respuesta de George :

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

Si pones esto en tu ~/.bash_profile puedes usarlo como un alias, es decir:

noderepl foo.js


Otra forma es definir esas funciones como globales.

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

A continuación, precargue el archivo en REPL como:

node -r ./file.js

Luego se puede acceder directamente a la función helloWorld en REPL.


Otra sugerencia que no veo aquí: prueba este pequeño código

#!/usr/bin/env node ''use strict''; const repl = require(''repl''); const cli = repl.start({ replMode: repl.REPL_MODE_STRICT }); cli.context.foo = require(''./foo''); // injects it into the repl

Entonces simplemente puede ejecutar este script e incluirá foo como una variable


Todavía no hay nada incorporado para proporcionar la funcionalidad exacta que describe. Sin embargo, una alternativa al uso require que use el comando .load dentro de REPL, como tal:

.load foo.js

Carga el archivo línea por línea como si lo hubiera escrito en REPL. A diferencia de require esto, contamina la historia de REPL con los comandos que cargó. Sin embargo, tiene la ventaja de ser repetible porque no se almacena en caché como require .

Lo que es mejor para usted dependerá de su caso de uso.

Editar: tiene aplicabilidad limitada porque no funciona en modo estricto, pero tres años más tarde aprendí que si el script no tiene ''use strict'' , puede usar eval para cargar el script sin contaminar el historial de REPL:

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


siempre uso este comando

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

funciona exactamente como en Python sin ningún paquete.


replpad desde que me cansé de volver a cargar el guión.

Simplemente instálalo a través de: npm install -g replpad

Entonces replpad ejecutando: replpad

Si desea que vea todos los archivos en el actual y todos los subdirectorios y los canalice en el repl cuando cambien do: replpad .

Echa un vistazo a los videos en el sitio para tener una mejor idea de cómo funciona y aprende sobre otras características interesantes que tiene como estas:

  • Acceda a los documentos del módulo principal en el repl a través de la función dox() que se agrega a cada función principal, es decir, fs.readdir.dox()
  • acceder a las lecturas del módulo de usuario en el repl a través de la función dox() que se agrega a cada módulo instalado a través de npm, es decir, marked.dox()
  • código fuente resaltado de la función de acceso, información sobre dónde se definió la función (archivo, número de lienzo) y comentarios de función y / o jsdocs, siempre que sea posible a través de la propiedad src que se agrega a cada función, es decir, express.logger.src
  • scriptie-talkie (vea el comando .talk )
  • agrega comandos y atajos de teclado
  • vim key bindings
  • soporte de mapa clave
  • parens haciendo coincidir a través de complemento de token de coincidencia
  • agrega el código ingresado en repl de nuevo al archivo mediante el método abreviado de teclado o el comando .append

Vorpal.js , que maneja este problema convirtiendo el nodo en una CLI interactiva. Es compatible con una extensión REPL, que te deja en una REPL dentro del contexto de tu aplicación en ejecución.

var vorpal = require(''vorpal'')(); var repl = require(''vorpal-repl''); vorpal .delimiter(''myapp>'') .use(repl) .show() .parse(process.argv);

Luego puede ejecutar la aplicación y se colocará en un REPL.

$ node myapp.js repl myapp> repl:


replpad es genial, pero para una manera rápida y fácil de cargar un archivo en un nodo, importar sus variables y comenzar una réplica, puede agregar el siguiente código al final de su archivo .js

if (require.main === module){ (function() { var _context = require(''repl'').start({prompt: ''$> ''}).context; var scope = require(''lexical-scope'')(require(''fs'').readFileSync(__filename)); for (var name in scope.locals[''''] ) _context[scope.locals[''''][name]] = eval(scope.locals[''''][name]); for (name in scope.globals.exported) _context[scope.globals.exported[name]] = eval(scope.globals.exported[name]); })(); }

Ahora bien, si su archivo es src.js , ejecutar el node src.js iniciará el nodo, cargará el archivo, iniciará una REPL y copiará todos los objetos declarados como var en el nivel superior, así como también los globales exportados. El if (require.main === module) garantiza que este código no se ejecutará si se incluye src.js través de una instrucción require . De hecho, puede agregar cualquier código que desee que se ejecute cuando esté ejecutando src.js autónoma para fines de depuración dentro de la sentencia if .