Node.js の組み込みモジュール一覧を取得する

Node.js の組み込みモジュール。fs とか path とか http とかはよく使うのではないだろうか。

この組み込みモジュール、全部でどれだけあるのだろうと思い、調べてみた。

# 使用したのは v18.5.0
$ node -v
v18.5.0

# 以下のコマンドで一覧を表示する
$ node -pe "require('module').builtinModules"
$ node -pe "require('repl').builtinModules"
$ node -pe "require('repl')._builtinLibs"

node コマンドの -e (--eval) オプションでワンライナーを実行できるのだが、-p (--print) オプションを使えば console.log() を書かずとも標準出力に出してくれるのを最近知った。

んで、module モジュールの builtinModules を参照するのが一番それっぽいかな。repl にも似たようなプロパティが生えていて、_builtinLibs の方は内部用のプロパティっぽくて repl.builtinModules と内容は同じだった。

module.builtinModules が一番多くのモジュールが出てくるのだが、_http_client のようにアンダースコアから始まるモジュールも見えていて、コレはユーザが利用するモジュールではなさそうに見える。それからコレは module でも repl でもそうなのだが、fs/promisespath/posix のようなスラッシュで区切られたサブモジュールも一覧に含まれている。

んでもう少し調べてみると、Sindre Sorhus 氏がビルトインモジュールを一覧表示する npm パッケージを作っていた。その中に一覧をベタ書きしている builtin-modules.json というファイルもあったのだが、このファイルには wasi というモジュール名が記載されていた。このモジュール自体は Node.js v13 頃から存在しているようなのだが、module.builtinModulesrepl.builtinModules では wasi は出力されていない。どうやら Sindre 氏は --experimental-wasi-unstable-preview1 フラグを付与して実行した結果を JSON にまとめているみたい。その説明どこにもないんだけど…w

一応、Node.js v18.5.0 時点で出力した一覧の比較表を以下に置いておく。

というワケで、

と思っておけば良いかな。

しかし、こうしてみると使ったことない組み込みモジュールもまだあるなぁ。知らないことはまだまだたくさんある。