Node.js v0.11.11 マニュアル & ドキュメンテーション
Table of Contents
REPL#
Stability: 3 - Stable
Read-Eval-Print-Loop (REPL) は単独のプログラムとしても他のプログラムに手軽に取り込む形でも利用することができます。 REPL は対話的に JavaScript を実行して結果を確認する手段を提供します。 デバッグやテストやその他の様々なことを試す用途で利用されます。
コマンドラインから node
を引数無しで実行することで、REPL プログラムに入ります。
REPL は Emacs 風の簡易な行編集機能を備えています。
mjr:~$ node
Type '.help' for options.
> a = [ 1, 2, 3];
[ 1, 2, 3 ]
> a.forEach(function (v) {
... console.log(v);
... });
1
2
3
より進んだ行編集を行うには、環境変数に NODE_NO_READLINE=1
を設定してnodeを起動してください。
これによって main とデバッガ REPL を正規の端末設定で起動し、
rlwrap
を利用することができます。
例として、bashrc ファイルに以下のように設定を追加します:
alias node="env NODE_NO_READLINE=1 rlwrap node"
repl.start(options)#
REPLServer
インスタンスを作成して返します。
以下の値を含む "options" オブジェクトを受け取ります。
prompt
- プロンプト。デフォルトは>
です。input
- 監視する入力ストリーム。デフォルトはprocess.stdin
です。output
- 読み込んだデータを書き込む出力ストリーム。 デフォルトはprocess.stdout
です。terminal
- もしstream
が TTY で、ANSI/VT100 エスケープコードを 出力するならtrue
。デフォルトはインスタンス作成時にoutput
ストリームをisTTY
でチェックします。eval
- 各行を評価するために使われる関数。デフォルトはeval()
を 非同期にラップした関数です。eval
をカスタマイズする例は下記を参照してください。useColors
-write
関数が色を付けるかどうかを指定するブーリアン値。writer
に異なる関数が設定された場合、これは何もしません。 デフォルトは repl のterminal
の値です。useGlobal
- もしtrue
に設定されると、repl は独立したコンテキストを 使う代わりにglobal
オブジェクトを使用します。デフォルトはfalse
です。ignoreUndefined
- もしtrue
に設定されると、repl はコマンドの戻り値がundefined
だった場合にそれを出力しません。デフォルトはfalse
です。writer
- コマンドが評価されるごとに実行される関数で、表示するために フォーマット (色づけも含みます) して返します。 デフォルトはutil.inspect
です。
以下のシグネチャを持つ独自の eval()
関数を使うことができます。
function eval(cmd, context, filename, callback) {
callback(null, result);
}
複数の REPL を起動した場合、同一の node インスタンスが実行されないことがあります。 それぞれの REPL はグローバルオブジェクトを共有しますが、I/O は固有のものを持ちます。
REPL を標準入力、Unix ドメインソケット、TCP ソケットのもとで起動する例を示します:
var net = require("net"),
repl = require("repl");
connections = 0;
repl.start({
prompt: "node via stdin> ",
input: process.stdin,
output: process.stdout
});
net.createServer(function (socket) {
connections += 1;
repl.start({
prompt: "node via Unix socket> ",
input: socket,
output: socket
}).on('exit', function() {
socket.end();
})
}).listen("/tmp/node-repl-sock");
net.createServer(function (socket) {
connections += 1;
repl.start({
prompt: "node via TCP socket> ",
input: socket,
output: socket
}).on('exit', function() {
socket.end();
});
}).listen(5001);
このプログラムをコマンドラインから実行すると、標準入力のもとで REPL が起動します。
他の REPL クライアントは Unix ドメインソケットか TCP ソケットを介して接続することができます。
telnet
が TCP ソケットへの接続に便利です。
socat
は Unix ドメイン /TCP 両方のソケットへの接続に利用できます。
標準入力の代わりに Unix ドメインソケットをベースとしたサーバから REPL を起動することによって、 再起動することなく node の常駐プロセスへ接続することができます。
net.Server
および net.Socket
インスタンス上の "フル機能の" (terminal
)
REPL を実行する例は、https://gist.github.com/2209310 を参照してください。
curl(1)
上で REPL インスタンスを実行する例は、
https://gist.github.com/2053342 を参照してください。
Event: 'exit'#
function () {}
何らかの方法でユーザが REPL を終了した場合に生成されます。
すなわち、repl で .exit
をタイプする、Ctrl+C を 2 回推して
SIGINT を生成する、あるいは Ctrl+D を推して input
ストリームで 'end'
を
知らせるなどです。
'exit'
を監視する例:
r.on('exit', function () {
console.log('Got "exit" event from repl!');
process.exit();
});
Event: 'reset'#
function (context) {}
REPL のコンテキストがリセットされた場合に生成されます。
これは .clear
をタイプした時に発生します。
もし { useGlobal: true }
を指定して repl を開始した場合、
このイベントは決して生成されません。
reset
を監視する例:
// Extend the initial repl context.
r = repl.start({ options ... });
someExtension.extend(r.context);
// When a new context is created extend it as well.
r.on('reset', function (context) {
console.log('repl has a new context');
someExtension.extend(context);
});
REPL Features#
REPL の中で Control+D を実行すると終了します。複数行に渡る式を入力とすることができます。
特別な変数である _
(アンダースコア) は一番最後の式の結果を保持します。
> [ "a", "b", "c" ]
[ 'a', 'b', 'c' ]
> _.length
3
> _ += 1
4
REPL はグローバルスコープに存在する全ての変数にアクセス可能です。
それぞれの REPLServer
に紐づく context
オブジェクトに変数を付与することで、
明示的に変数を公開させることが可能です。 例:
// repl_test.js
var repl = require("repl"),
msg = "message";
repl.start("> ").context.m = msg;
context
オブジェクトに設定された変数は、REPL の中ではローカルな変数として現れます:
mjr:~$ node repl_test.js
> m
'message'
特別な REPL コマンドがいくつかあります:
.break
- 複数行に渡って式を入力している間に、途中で分からなくなったり完了させなくても良くなることがあります。.break
で最初からやり直します。.clear
-context
オブジェクトを空の状態にリセットし、複数行に入力している式をクリアします。.exit
- I/Oストリームを閉じ、REPLを終了させます。.help
- このコマンドの一覧を表示します。.save
- 現在の REPL セッションをファイルに保存します。.save ./file/to/save.js
.load
- 現在の REPL セッションにファイルをロードします。.load ./file/to/load.js
REPL では、以下のキーコンビネーションは特別な効果を持ちます
<ctrl>C
-.break
キーワードと同様です。 現在のコマンドを終了します。 強制的に終了したければ空の行で 2 回押してください。<ctrl>D
-.exit
キーワードと同様です。