Project-specific REPL configuration
npm install local-repl


Project-specific REPLs for Node.js. local-repl allows you to automatically import modules and values into your REPL sessions with simple configuration in your project's package.json and/or .replrc.js.
- Automatically import modules into your REPL sessions
- Use await in the REPL without having to wrap your code in async functions
- Configure the banner and prompt
```
$ npm install local-repl --save-devOR
$ yarn add local-repl --dev
Add the following to package.json. Note: lodash is used as an example
here; it is not required to use local-repl.
`json`
{
"scripts": {
"repl": "local-repl"
},
"devDependencies": {
"local-repl": "^3.0.0"
},
"dependencies": {
"lodash": "^4.17.4",
},
"repl": [
"lodash",
]
}
``
$ npm run repl
This will start a REPL session with lodash already imported.

You can pass an array of objects containing the keys "name" (required), "module" (for imports), or "value" (for values).
`json`
{
"repl": [
{"name": "l", "module": "lodash"},
{"name": "meaningOfLife", "value": 42}
]
}

Local modules can be imported, too.
`json`
{
"repl": [
{"name": "project", "module": "./"},
{"name": "utils", "module": "./lib/utils"}
]
}
Instead of defining configuration in "package.json", you may define your configuration in a .replrc.js file. This is useful if you want to dynamically compute modules and values for your REPLs.
`js
// .replrc.js
const User = require('./myapp/models/User');
module.exports = {
context: [
'lodash',
'myapp/utils',
{name: 'me', value: User.getByEmail('sloria')},
]
}
`
Note: Configuration defined in .replrc.js takes precedence over configuration defined in package.json.
Context can be defined as an object rather than an array.
`javascript
// .replrc.js
const User = require('./myapp/models/User');
module.exports ={
context: {
l: require('lodash'),
utils: require('myapp/utils'),
me: User.getByEmail('sloria'),
}
}
`
Context values that are promises will be resolved before the REPL starts.
`javascript
// .replrc.js
const promise = new Promise((resolve) => {
setTimeout(() => {
resolve(42);
}, 500);
});
module.exports = {
// REPL will have meaningOfLife with value 42 in context
context: {
meaningOfLife: promise,
}
};
`
You can use await in your REPL sessions without having toasync
create functions.

Just add the following to your package.json:
`json`
{
"repl": {
"enableAwait": true
}
}
Or in .replrc.js
`js
// .replrc.js
module.exports = {
enableAwait: true
}
`
In package.json:
`json`
{
"repl": {
"prompt": "myproject $"
}
}
In .replrc.js:
`javascript`
// .replrc.js
module.exports = {
prompt: 'myproject $'
}
You can also define prompt as a function in .replrc.js. The function will receive the REPL context and the parsed package.json object.
`javascript${pkg.name} ${pkg.version} $
// .replrc.js
module.exports = {
prompt: (context, pkg) => {
return `
}
}
In package.json:
`json`
{
"repl": {
"banner": "Welcome to the myapp REPL. Happy hacking!"
}
}
You can also define banner as a function in .replrc.js. The function will receive the REPL context and the parsed package.json object.
`javascript
// .replrc.js
const _ = require('lodash');
const chalk = require('chalk');
module.exports = {
context: [
{name: 'l', value: _},
{name: 'meaningOfLife', value: 42},
],
banner: (context, pkg) => {
console.log(chalk.bold(Welcome to the REPL for myapp ${pkg.version}.));`
console.log(chalk.green('Happy hacking!'));
console.log(chalk.cyan('Context:'), _.keys(context).sort().join(', '));
}
}

local-repl can be used programatically. The .start(options) function takes the same options as Node's built-in repl.start(options) and returns a Promise that resolves to a REPLServer instance.
`javascript
const repl = require('local-repl');
repl.start({ prompt: '< -_- > ' });
`
local-repl` is inspired a number of other great projects:
- konch - REPL configuration for Python
- n_ - Node.js REPL with lodash
MIT licensed. See LICENSE for more details.