You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: locale/pt-br/knowledge/REPL/how-to-create-a-custom-repl.md
+40-39Lines changed: 40 additions & 39 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,10 +11,12 @@ layout: knowledge-post.hbs
11
11
O Node permite aos usuários criarem seus próprios REPLs com o [módulo `repl`](https://nodejs.org/dist/latest/docs/api/repl.html). A forma de uso mais básica se parece com isso:
12
12
13
13
```js
14
+
var repl =require('repl')
15
+
14
16
repl.start(prompt, stream);
15
17
```
16
18
17
-
`prompt` é uma string que é usada para o prompt do seu REPL e tem por padrão o "> ". `stream` é um stream que o repl escuta e tem por padrão o `processo.stdin`. Quando você executa o comando `node` pelo prompt de comando, o que ele faz nos bastidores é executar `repl.start()` para fornecer o REPL padrão.
19
+
No exemplo acima, o `prompt` é uma string que é usada para o prompt do seu REPL, que tem por padrão o "> ". `stream` é um stream que o repl escuta e tem por padrão o `process.stdin`. Quando você executa o comando `node` pelo prompt de comando, o que ele faz nos bastidores é executar `repl.start()` para fornecer o REPL padrão.
18
20
19
21
Entretanto, o repl é bem flexível. Abaixo segue um exemplo que demonstra isso:
20
22
@@ -46,59 +48,58 @@ var local = repl.start("node::local> ");
46
48
local.context.mood= mood;
47
49
```
48
50
49
-
Este script cria *dois* REPLs: Um é normal, exceto pelo prompt customizado. Porém o *outro* é exposto através do módulo net de forma que se possa fazer a conexão telnet para ele! Além disso, ele usa a propriedade `context` para expor a função "mood" para os dois REPLs, e a string "bonus" apenas para o REPL remoto. Como pode ver, essa forma de tentar expor objetos em um REPL e não no outro *não funciona*.
51
+
Este script cria *dois* REPLs: Um é normal, exceto pelo prompt customizado. Porém o *outro* é exposto através do módulo net de forma que se possa fazer a conexão telnet para ele! Além disso, ele usa a propriedade `context` para expor a função "mood" para os dois REPLs, e a string "bonus" apenas para o REPL remoto. Como você verá, essa forma de tentar expor objetos em um REPL e não no outro *não funciona*.
50
52
51
53
Além disso, todos os objetos no escopo global também serão acessíveis para os seus REPLs.
52
54
53
-
Observe o que acontece quando eu executo o script:
54
-
55
-
$ node repl.js
56
-
REPL remoto iniciou na porta 5001.
57
-
node::local> .exit
58
-
^Cjosh@pidgey:/tmp/telnet$ node repl.js
59
-
REPL remoto iniciou na porta 5001.
60
-
node::local> mood()
61
-
'^__^'
62
-
node::local> bonus
63
-
ReferenceError: bonus is not defined
64
-
at [object Context]:1:1
65
-
at Interface.<anonymous> (repl.js:171:22)
66
-
at Interface.emit (events.js:64:17)
67
-
at Interface._onLine (readline.js:153:10)
68
-
at Interface._line (readline.js:408:8)
69
-
at Interface._ttyWrite (readline.js:585:14)
70
-
at ReadStream.<anonymous> (readline.js:73:12)
71
-
at ReadStream.emit (events.js:81:20)
72
-
at ReadStream._emitKey (tty_posix.js:307:10)
73
-
at ReadStream.onData (tty_posix.js:70:12)
55
+
Aqui é o que acontece quando você executa o script:
56
+
57
+
```shell
58
+
$ node repl.js
59
+
REPL remoto iniciou na porta 5001.
60
+
node::local> .exit
61
+
# <ctrl>-C
74
62
63
+
$ node repl.js
64
+
REPL remoto iniciou na porta 5001.
65
+
node::local>mood()
66
+
'^__^'
67
+
node::local> bonus
68
+
ReferenceError: bonus is not defined
69
+
```
75
70
76
71
Como podem notar, a função `mood` é usada junto do REPL local. Mas a string `bonus` não. Isso é esperado.
77
72
78
73
Observem agora o que acontece quando fazemos um telnet para a porta 5001:
79
74
80
-
josh@pidgey:/tmp/telnet$ telnet localhost 5001
81
-
Trying ::1...
82
-
Trying 127.0.0.1...
83
-
Connected to localhost.
84
-
Escape character is '^]'.
85
-
node::remote> mood()
86
-
'>.<'
87
-
node::remote> bonus
88
-
'DESBLOQUEADO'
75
+
```shell
76
+
$ telnet localhost 5001
77
+
Trying ::1...
78
+
Trying 127.0.0.1...
79
+
Connected to localhost.
80
+
Escape character is '^]'.
81
+
node::remote>mood()
82
+
'>.<'
83
+
node::remote> bonus
84
+
'DESBLOQUEADO'
85
+
```
89
86
90
-
Como podem notar, a função `mood`*também* é disponibilizada através da telnet! Além disso `bonus` também é.
87
+
Como você pode ver, a função `mood`*também* é disponibilizada através da telnet! Além disso `bonus` também é.
91
88
92
89
Outro ponto interessante das minhas ações é que bonus agora também é definida no REPL local:
93
90
94
-
node::local> bonus
95
-
'UNLOCKED'
91
+
```shell
92
+
node::local> bonus
93
+
'DESBLOQUEADO'
94
+
```
96
95
97
96
Parece que nós "desbloqueamos" a string `bonus` no REPL local também. Como parece ser, quaisquer variáveis criadas em um REPL também estão disponíveis no outro:
98
97
99
-
node::local> var node = "INCRÍVEL!"
98
+
```shell
99
+
node::local> var node = "INCRÍVEL!"
100
100
101
-
node::remote> node
102
-
'INCRÍVEL!'
101
+
node::remote> node
102
+
'INCRÍVEL!'
103
+
```
103
104
104
-
Como você pode ver, o REPL do node é potente e flexível.
105
+
Como você pode ver, o REPL do node é poderoso e flexível.
Copy file name to clipboardExpand all lines: locale/pt-br/knowledge/REPL/how-to-use-nodejs-repl.md
+94-30Lines changed: 94 additions & 30 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,52 +8,116 @@ difficulty: 1
8
8
layout: knowledge-post.hbs
9
9
---
10
10
11
+
# Aprenda a usar o REPL
11
12
12
-
O Node.js vem com seu próprio REPL, que é uma abreviação para 'Read-Eval-Print Loop'. É o shell do Node.js. Qualquer JavaScript válido que pode ser escrito em um script, pode ser passado para o REPL. Pode ser extremamente útil para experimentos com o node.js, depurar código e entender alguns comportamentos excêntricos do JavaScript.
13
+
O Node.js vem com seu próprio REPL, que é uma abreviação para 'Read-Eval-Print Loop'. É o shell interativo do Node.js. Qualquer JavaScript válido que pode ser escrito em um script, pode ser passado para o REPL. Pode ser extremamente útil para experimentos com o node.js, depurar código e entender alguns comportamentos excêntricos do JavaScript.
13
14
14
-
Para executar é simples - execute o node sem um nome de arquivo.
15
+
Node.js tem um REPL independente, acessível a partir da linha de comando, e um módulo REPL integrado que você pode usar para
16
+
[criar seu próprio REPL customizado](https://nodejs.org/api/repl.html#repl_repl). Nós vamos aprender o básico do REPL indepente.
15
17
16
-
docs@nodejitsu:~/$ node
18
+
## Como começar com REPL
17
19
18
-
Ele então te deixa em um prompt simples ('>') onde você pode escrever qualquer comando JavaScript que desejar. Assim como na maioria dos shells, você pode apertar as setas para cima e para baixo para navegar através do histórico de comandos e modificar comandos anteriores. O REPL também utiliza a tecla <kbd>Tab</kbd> para completar o comando.
20
+
Iniciar o REPL é simples, basta executar o node na linha de comando sem um nome de arquivo.
19
21
20
-
Qualquer que seja o comando, ele imprimirá o valor de retorno deste comando. Se você quiser reutilizar um valor de retorno anterior, você pode usar a variável especial `_`.
22
+
```shell
23
+
$ node
24
+
```
21
25
22
-
Por exemplo:
26
+
Ele te deixa em um prompt simples ('>') onde você pode escrever qualquer comando JavaScript que desejar. Assim como na maioria dos shells, você pode apertar as setas para cima e para baixo para navegar através do histórico de comandos e modificar comandos anteriores.
27
+
28
+
```shell
29
+
$ node
30
+
> var x = "Olá, Mundo!"
31
+
undefined
32
+
> x
33
+
"Olá, Mundo!"
34
+
> .exit
35
+
```
36
+
37
+
Você pode também usar a tecla `Tab` para autocompletar alguns comandos. Quando várias opçõeS de preenchimento estiverem disponíveis, use `Tab` novamente para percorrê-las.
38
+
39
+
## Comandos especiais e sair do REPL
40
+
41
+
Os seguintes comandos especiais são surpotados por todas as instâncias do REPL (do [Documentação Node.js REPL](https://nodejs.org/api/repl.html#repl_commands_and_special_keys))
42
+
43
+
*`.exit` - Fecha o fluxo de E/S, fazendo com que o REPL saia.
44
+
*`.break` - Quando no processo de entrada de multilinha de expressão, entra o comando `.break` (ou a combinação das teclas `ctrl+C` é pressionada), as próximos entradas ou o processo daquela expressão serão abortados.
45
+
*`.clear` - Reseta o `contexto` do REPL para um objeto vazio e limpa qualquer multilinha de expressão que tenha sido inserida atualmente.
46
+
*`.help` - Mostra a lista de comandos especiais.
47
+
*`.save` - Salva a sessão atual do REPL em um arquivo.
48
+
`> .save ./documentos/salvo.js`
49
+
*`.load` - Carrega um arquivo dentro da sessão atual do REPL.
50
+
`> .load ./documentos/carregar.js`
51
+
*`.editor` - Entra no modo editor (`ctrl+D` para terminar, `ctrl+C` para cancelar).
52
+
53
+
```shell
54
+
> .editor
55
+
# Entering editor mode (^D to finish, ^C to cancel)
56
+
functionsaudacao(nome) {
57
+
return`Olá, ${nome}!`;
58
+
}
59
+
60
+
saudacao('usuário do Node.js');
23
61
24
-
node
25
-
> 1+1
26
-
2
27
-
> _+1
28
-
3
62
+
# ctrl+D
63
+
'Olá, usuário do Node.js!'
64
+
>
65
+
```
66
+
67
+
As seguintes combiações de teclas no REP têm esses efeitos especiais:
68
+
69
+
*`ctr+C` - Quando pressionado uma vez, tem o mesmo efeito que o comando `.break`.
70
+
Quando pressionando duas vezes em um linha vazia, tem o mesmo efeito que o comando `.exit`.
71
+
*`ctrl+D` - Tem o mesmo efeito que o comando `.exit`.
72
+
*`tab` - Quando pressionado numa linha vazia, mostra as variáveis globais e locais (escopo).
73
+
Quando pressionado durando a entrada de um comando, mostra as opções relevantes que preenchem o comando.
74
+
75
+
## Retornar valores
76
+
77
+
Qualquer que seja o comando, ele imprimirá o valor de retorno deste comando. Se você quiser reutilizar o valor de retorno anterior, você pode usar a variável especial `_`.
78
+
79
+
Por exemplo:
80
+
```shell
81
+
$ node
82
+
> 1+1
83
+
2
84
+
> _+1
85
+
3
86
+
```
29
87
30
88
Algo importante de notar é onde os valores de retorno do REPL são aplicados:
31
89
32
-
> x = 10
33
-
10
34
-
> var y = 5
35
-
> x
36
-
10
37
-
> y
38
-
5
90
+
```shell
91
+
> x = 10
92
+
10
93
+
> var y = 5
94
+
> x
95
+
10
96
+
> y
97
+
5
98
+
```
39
99
40
100
Quando a palavra-chave `var` é utilizada, o valor da expressão é armazenado. Porém, *NÃO* retornado. Quando um simples identificador é utilizado, o valor é retornado também, assim como armazenado.
41
101
102
+
## Acessando Módulos
103
+
42
104
Se você precisar acessar quaisquer módulos nativos, ou módulos terceiros, eles podem ser acessados através do `require`, assim como em qualquer parte do Node.
43
105
44
106
Por exemplo:
45
107
46
-
node
47
-
> path = require('path')
48
-
{ resolve: [Function],
49
-
normalize: [Function],
50
-
join: [Function],
51
-
dirname: [Function],
52
-
basename: [Function],
53
-
extname: [Function],
54
-
exists: [Function],
55
-
existsSync: [Function] }
56
-
> path.basename("/a/b/c.txt")
57
-
'c.txt'
108
+
```shell
109
+
$ node
110
+
> path = require('path')
111
+
{ resolve: [Function],
112
+
normalize: [Function],
113
+
join: [Function],
114
+
dirname: [Function],
115
+
basename: [Function],
116
+
extname: [Function],
117
+
exists: [Function],
118
+
existsSync: [Function] }
119
+
> path.basename("/a/b/c.txt")
120
+
'c.txt'
121
+
```
58
122
59
123
Note novamente que sem a palavra-chave `var`, o conteúdo do objeto é retornado imediatamente e apresentado no `stdout`.
0 commit comments