Tengo un script foo.js
que contiene algunas funciones con las que quiero jugar en REPL.
¿Hay alguna manera de que el nodo ejecute mi script y luego salte a un REPL con todos los globales declarados, como puedo con python -i foo.py
o ghci foo.hs
?
Tengo un script foo.js
que contiene algunas funciones con las que quiero jugar en REPL.
¿Hay alguna manera de que el nodo ejecute mi script y luego salte a un REPL con todos los globales declarados, como puedo con python -i foo.py
o ghci foo.hs
?
Todavía no hay nada incorporado para proporcionar la funcionalidad exacta que describe. Sin embargo, una alternativa a usarlo require
para usar el .load
comando dentro de REPL, como tal:
.load foo.js
Carga el archivo en línea por línea como si lo hubiera escrito en REPL. A diferencia de require
esto contamina la historia REPL con los comandos que ha cargado. Sin embargo, tiene la ventaja de ser repetible porque no se almacena en caché como require
.
Lo que sea mejor para usted dependerá de su caso de uso.
Editar: tiene una aplicabilidad limitada porque no funciona en modo estricto, pero tres años después supe que si su script no tiene 'use strict'
, puede usarlo eval
para cargar su script sin contaminar el historial REPL:
var fs = require('fs');
eval(fs.readFileSync('foo.js').toString())
siempre uso este comando
funciona exactamente como en Python sin ningún paquete.
fuente
Hice Vorpal.js , que maneja este problema al convertir su nodo en una CLI interactiva. Admite una extensión REPL, que lo coloca en un REPL dentro del contexto de su aplicación en ejecución.
Luego puede ejecutar la aplicación y se colocará en una REPL.
fuente
Otra forma es definir esas funciones como globales.
Luego precargue el archivo en REPL como:
Entonces
helloWorld
se puede acceder a la función directamente en REPL.fuente
He creado replpad ya me cansé de volver a cargar el script de forma repetida.
Simplemente instálelo a través de:
npm install -g replpad
Luego úselo ejecutando:
replpad
Si desea ver todos los archivos en el actual y todos los subdirectorios y canalizarlos en la respuesta cuando cambian, haga lo siguiente:
replpad .
Echa un vistazo a los videos en el sitio para tener una mejor idea de cómo funciona y conocer algunas otras características interesantes que tiene como estas:
dox()
función que se agrega a cada función principal, es decirfs.readdir.dox()
dox()
función que se agrega a cada módulo instalado a través de npm, es decirmarked.dox()
src
propiedad que se agrega a cada función, es decirexpress.logger.src
.talk
comandos).append
comandoVer: https://github.com/thlorenz/replpad
fuente
CXX=clang++ npm install replpad
g++: error: unrecognized command line option '-stdlib=libc++'
# # Fatal error in ../deps/v8/src/api.cc, line 1248 # Check failed: !value_obj->IsJSReceiver() || value_obj->IsTemplateInfo(). # Illegal instruction: 4
¿Por qué no cargar el archivo en un nodo interactivo repl?
Luego puede agregar a los scripts package.json
probado usando el nodo v8.1.2
fuente
node -i -r "./build/main/index.js"
?Actualmente no puede hacerlo directamente, pero puede hacerlo
mylib = require('./foo.js')
en REPL. Recuerde que los métodos se exportan, no se declaran como globales.fuente
.load my_work.js
, a pesar de requerir algunasexports.working_var = ...
declaraciones adicionales , porque REPL no acepta algunos tipos de javascript perfectamente válidos, como comentarios de varias líneas (al menos con mireadline
configuración).replpad
es genial, pero para una manera rápida y fácil de cargar un archivo en el nodo, importar sus variables e iniciar una respuesta, puede agregar el siguiente código al final de su archivo .jsAhora, si su archivo está en
src.js
ejecución,node src.js
se iniciará el nodo, cargará el archivo, iniciará un REPL y copiará todos los objetos declarados comovar
en el nivel superior, así como cualquier global exportado. Estoif (require.main === module)
asegura que este código no se ejecutará sisrc.js
se incluye a través de unarequire
declaración. De hecho, puede agregar cualquier código que desee que se ejecute cuando se ejecuta de formasrc.js
independiente con fines de depuración dentro de laif
declaración.fuente
Aquí hay una versión de la función bash de la respuesta de George :
Si pone esto en su
~/.bash_profile
puede usarlo como un alias, es decir:fuente
Otra sugerencia que no veo aquí: prueba este pequeño código
Luego, simplemente puede ejecutar este script e incluirá
foo
como una variablefuente
Vieja respuesta
Abrirá el nodo REPL y escribirá todas las líneas de test.js en REPL, pero por alguna razón el nodo se cerrará cuando finalice el archivo
Otro problema es que las funciones no se izarán.
Mejor respuesta
Entonces, todos los globales declarados sin var dentro de test2.js estarán disponibles en el REPL
no estoy seguro de por qué var a en el ámbito global no estará disponible
fuente