doc: add esm examples to node:repl
PR-URL: https://github.com/nodejs/node/pull/55432 Reviewed-By: Tierney Cyren <hello@bnb.im> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
parent
a7c9f85f2f
commit
2d4e35c74d
172
doc/api/repl.md
172
doc/api/repl.md
@ -10,7 +10,11 @@ The `node:repl` module provides a Read-Eval-Print-Loop (REPL) implementation
|
|||||||
that is available both as a standalone program or includible in other
|
that is available both as a standalone program or includible in other
|
||||||
applications. It can be accessed using:
|
applications. It can be accessed using:
|
||||||
|
|
||||||
```js
|
```mjs
|
||||||
|
import repl from 'node:repl';
|
||||||
|
```
|
||||||
|
|
||||||
|
```cjs
|
||||||
const repl = require('node:repl');
|
const repl = require('node:repl');
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -106,7 +110,14 @@ The default evaluator provides access to any variables that exist in the global
|
|||||||
scope. It is possible to expose a variable to the REPL explicitly by assigning
|
scope. It is possible to expose a variable to the REPL explicitly by assigning
|
||||||
it to the `context` object associated with each `REPLServer`:
|
it to the `context` object associated with each `REPLServer`:
|
||||||
|
|
||||||
```js
|
```mjs
|
||||||
|
import repl from 'node:repl';
|
||||||
|
const msg = 'message';
|
||||||
|
|
||||||
|
repl.start('> ').context.m = msg;
|
||||||
|
```
|
||||||
|
|
||||||
|
```cjs
|
||||||
const repl = require('node:repl');
|
const repl = require('node:repl');
|
||||||
const msg = 'message';
|
const msg = 'message';
|
||||||
|
|
||||||
@ -124,7 +135,19 @@ $ node repl_test.js
|
|||||||
Context properties are not read-only by default. To specify read-only globals,
|
Context properties are not read-only by default. To specify read-only globals,
|
||||||
context properties must be defined using `Object.defineProperty()`:
|
context properties must be defined using `Object.defineProperty()`:
|
||||||
|
|
||||||
```js
|
```mjs
|
||||||
|
import repl from 'node:repl';
|
||||||
|
const msg = 'message';
|
||||||
|
|
||||||
|
const r = repl.start('> ');
|
||||||
|
Object.defineProperty(r.context, 'm', {
|
||||||
|
configurable: false,
|
||||||
|
enumerable: true,
|
||||||
|
value: msg,
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
```cjs
|
||||||
const repl = require('node:repl');
|
const repl = require('node:repl');
|
||||||
const msg = 'message';
|
const msg = 'message';
|
||||||
|
|
||||||
@ -280,20 +303,34 @@ When a new [`repl.REPLServer`][] is created, a custom evaluation function may be
|
|||||||
provided. This can be used, for instance, to implement fully customized REPL
|
provided. This can be used, for instance, to implement fully customized REPL
|
||||||
applications.
|
applications.
|
||||||
|
|
||||||
The following illustrates a hypothetical example of a REPL that performs
|
The following illustrates an example of a REPL that squares a given number:
|
||||||
translation of text from one language to another:
|
|
||||||
|
|
||||||
```js
|
```mjs
|
||||||
const repl = require('node:repl');
|
import repl from 'node:repl';
|
||||||
const { Translator } = require('translator');
|
|
||||||
|
|
||||||
const myTranslator = new Translator('en', 'fr');
|
function byThePowerOfTwo(number) {
|
||||||
|
return number * number;
|
||||||
function myEval(cmd, context, filename, callback) {
|
|
||||||
callback(null, myTranslator.translate(cmd));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
repl.start({ prompt: '> ', eval: myEval });
|
function myEval(cmd, context, filename, callback) {
|
||||||
|
callback(null, byThePowerOfTwo(cmd));
|
||||||
|
}
|
||||||
|
|
||||||
|
repl.start({ prompt: 'Enter a number: ', eval: myEval });
|
||||||
|
```
|
||||||
|
|
||||||
|
```cjs
|
||||||
|
const repl = require('node:repl');
|
||||||
|
|
||||||
|
function byThePowerOfTwo(number) {
|
||||||
|
return number * number;
|
||||||
|
}
|
||||||
|
|
||||||
|
function myEval(cmd, context, filename, callback) {
|
||||||
|
callback(null, byThePowerOfTwo(cmd));
|
||||||
|
}
|
||||||
|
|
||||||
|
repl.start({ prompt: 'Enter a number: ', eval: myEval });
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Recoverable errors
|
#### Recoverable errors
|
||||||
@ -354,7 +391,21 @@ To fully customize the output of a [`repl.REPLServer`][] instance pass in a new
|
|||||||
function for the `writer` option on construction. The following example, for
|
function for the `writer` option on construction. The following example, for
|
||||||
instance, simply converts any input text to upper case:
|
instance, simply converts any input text to upper case:
|
||||||
|
|
||||||
```js
|
```mjs
|
||||||
|
import repl from 'node:repl';
|
||||||
|
|
||||||
|
const r = repl.start({ prompt: '> ', eval: myEval, writer: myWriter });
|
||||||
|
|
||||||
|
function myEval(cmd, context, filename, callback) {
|
||||||
|
callback(null, cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
function myWriter(output) {
|
||||||
|
return output.toUpperCase();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```cjs
|
||||||
const repl = require('node:repl');
|
const repl = require('node:repl');
|
||||||
|
|
||||||
const r = repl.start({ prompt: '> ', eval: myEval, writer: myWriter });
|
const r = repl.start({ prompt: '> ', eval: myEval, writer: myWriter });
|
||||||
@ -380,7 +431,16 @@ added: v0.1.91
|
|||||||
Instances of `repl.REPLServer` are created using the [`repl.start()`][] method
|
Instances of `repl.REPLServer` are created using the [`repl.start()`][] method
|
||||||
or directly using the JavaScript `new` keyword.
|
or directly using the JavaScript `new` keyword.
|
||||||
|
|
||||||
```js
|
```mjs
|
||||||
|
import repl from 'node:repl';
|
||||||
|
|
||||||
|
const options = { useColors: true };
|
||||||
|
|
||||||
|
const firstInstance = repl.start(options);
|
||||||
|
const secondInstance = new repl.REPLServer(options);
|
||||||
|
```
|
||||||
|
|
||||||
|
```cjs
|
||||||
const repl = require('node:repl');
|
const repl = require('node:repl');
|
||||||
|
|
||||||
const options = { useColors: true };
|
const options = { useColors: true };
|
||||||
@ -424,7 +484,20 @@ reference to the `context` object as the only argument.
|
|||||||
This can be used primarily to re-initialize REPL context to some pre-defined
|
This can be used primarily to re-initialize REPL context to some pre-defined
|
||||||
state:
|
state:
|
||||||
|
|
||||||
```js
|
```mjs
|
||||||
|
import repl from 'node:repl';
|
||||||
|
|
||||||
|
function initializeContext(context) {
|
||||||
|
context.m = 'test';
|
||||||
|
}
|
||||||
|
|
||||||
|
const r = repl.start({ prompt: '> ' });
|
||||||
|
initializeContext(r.context);
|
||||||
|
|
||||||
|
r.on('reset', initializeContext);
|
||||||
|
```
|
||||||
|
|
||||||
|
```cjs
|
||||||
const repl = require('node:repl');
|
const repl = require('node:repl');
|
||||||
|
|
||||||
function initializeContext(context) {
|
function initializeContext(context) {
|
||||||
@ -475,7 +548,25 @@ properties:
|
|||||||
|
|
||||||
The following example shows two new commands added to the REPL instance:
|
The following example shows two new commands added to the REPL instance:
|
||||||
|
|
||||||
```js
|
```mjs
|
||||||
|
import repl from 'node:repl';
|
||||||
|
|
||||||
|
const replServer = repl.start({ prompt: '> ' });
|
||||||
|
replServer.defineCommand('sayhello', {
|
||||||
|
help: 'Say hello',
|
||||||
|
action(name) {
|
||||||
|
this.clearBufferedCommand();
|
||||||
|
console.log(`Hello, ${name}!`);
|
||||||
|
this.displayPrompt();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
replServer.defineCommand('saybye', function saybye() {
|
||||||
|
console.log('Goodbye!');
|
||||||
|
this.close();
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
```cjs
|
||||||
const repl = require('node:repl');
|
const repl = require('node:repl');
|
||||||
|
|
||||||
const replServer = repl.start({ prompt: '> ' });
|
const replServer = repl.start({ prompt: '> ' });
|
||||||
@ -637,7 +728,14 @@ The `repl.start()` method creates and starts a [`repl.REPLServer`][] instance.
|
|||||||
|
|
||||||
If `options` is a string, then it specifies the input prompt:
|
If `options` is a string, then it specifies the input prompt:
|
||||||
|
|
||||||
```js
|
```mjs
|
||||||
|
import repl from 'node:repl';
|
||||||
|
|
||||||
|
// a Unix style prompt
|
||||||
|
repl.start('$ ');
|
||||||
|
```
|
||||||
|
|
||||||
|
```cjs
|
||||||
const repl = require('node:repl');
|
const repl = require('node:repl');
|
||||||
|
|
||||||
// a Unix style prompt
|
// a Unix style prompt
|
||||||
@ -709,7 +807,43 @@ separate I/O interfaces.
|
|||||||
The following example, for instance, provides separate REPLs on `stdin`, a Unix
|
The following example, for instance, provides separate REPLs on `stdin`, a Unix
|
||||||
socket, and a TCP socket:
|
socket, and a TCP socket:
|
||||||
|
|
||||||
```js
|
```mjs
|
||||||
|
import net from 'node:net';
|
||||||
|
import repl from 'node:repl';
|
||||||
|
import process from 'node:process';
|
||||||
|
|
||||||
|
let connections = 0;
|
||||||
|
|
||||||
|
repl.start({
|
||||||
|
prompt: 'Node.js via stdin> ',
|
||||||
|
input: process.stdin,
|
||||||
|
output: process.stdout,
|
||||||
|
});
|
||||||
|
|
||||||
|
net.createServer((socket) => {
|
||||||
|
connections += 1;
|
||||||
|
repl.start({
|
||||||
|
prompt: 'Node.js via Unix socket> ',
|
||||||
|
input: socket,
|
||||||
|
output: socket,
|
||||||
|
}).on('exit', () => {
|
||||||
|
socket.end();
|
||||||
|
});
|
||||||
|
}).listen('/tmp/node-repl-sock');
|
||||||
|
|
||||||
|
net.createServer((socket) => {
|
||||||
|
connections += 1;
|
||||||
|
repl.start({
|
||||||
|
prompt: 'Node.js via TCP socket> ',
|
||||||
|
input: socket,
|
||||||
|
output: socket,
|
||||||
|
}).on('exit', () => {
|
||||||
|
socket.end();
|
||||||
|
});
|
||||||
|
}).listen(5001);
|
||||||
|
```
|
||||||
|
|
||||||
|
```cjs
|
||||||
const net = require('node:net');
|
const net = require('node:net');
|
||||||
const repl = require('node:repl');
|
const repl = require('node:repl');
|
||||||
let connections = 0;
|
let connections = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user