Make a customized node REPL with ease.
Building a custom REPL is not hard with the repl
module, but you need a non-trivial amount of boilerplate to have things you
might expect out of the box.
This module exposes a function that creates and starts a
REPLServer
with some
packed features:
- Multiline expressions: You don't have to write every statement in a single line.
-
Command history: You can pass a path to a history file that will save the
command history between sessions (using
repl.history
). -
Promises evaluation: Avoid doing things like
(async () => { const foo = await getFoo(); console.log(foo) })()
: every expression that evaluates to a promise will be waited. JustgetFoo()
will work.
Install it:
npm install repl-maker
create your repl:
const path = require('path')
const os = require('os')
const makeRepl = require('repl-maker')
const historyFile = path.join(os.homedir(), '.my_repl_history')
const context = {
answer: 42,
square: (x) => x*x
}
makeRepl({ historyFile, context })
and use it:
$ node index.js
> answer
42
> Promise.resolve(3)
3
> square(5)
25
The makeRepl
function accepts an object with these options:
-
prompt
(string) - The prompt of your REPL (default:>
) -
context
(object): Every key in this object will be available as a local variable (default:{}
) -
historyFile
(string) - Path to a file that will save the command history (default:null
, meaning that no history file will be generated) -
evalAsync
(boolean) - Configures if the REPL waits until promises are resolved or not (default:true
) -
recoverErrors
(boolean) - Configures if multiline expressions are allowed or not (default:true
) -
onExit
(function) - A callback that will be executed when the user exits the REPL (default:null
)
If you find yourself opening a node REPL and requiring some stuff of your project to try it out, then this module can help you.
A very straightforward example is an express server with some models. You can
create a minimal repl.js
file:
const makeRepl = require('repl-maker')
const db = require('./models')
makeRepl({
context: { db }
})
and add a npm script "repl": "node repl.js"
. Then you can start it and
interact with your models:
npm run repl
> db.findUser({ id: 1 }).then(user => user.name)
'John Doe'