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/promises や path/posix のようなスラッシュで区切られたサブモジュールも一覧に含まれている。
んでもう少し調べてみると、Sindre Sorhus 氏がビルトインモジュールを一覧表示する npm パッケージを作っていた。その中に一覧をベタ書きしている builtin-modules.json というファイルもあったのだが、このファイルには wasi というモジュール名が記載されていた。このモジュール自体は Node.js v13 頃から存在しているようなのだが、module.builtinModules や repl.builtinModules では wasi は出力されていない。どうやら Sindre 氏は --experimental-wasi-unstable-preview1 フラグを付与して実行した結果を JSON にまとめているみたい。その説明どこにもないんだけど…w
- 参考 : sindresorhus/builtin-modules: List of the Node.js builtin modules
- 内部では
require('module').builtinModulesを参照しフィルタリングしている。sysは明示的に除外されている
- 内部では
- 参考 : builtin-modules/builtin-modules.json at main · sindresorhus/builtin-modules
wasiが記載されている
一応、Node.js v18.5.0 時点で出力した一覧の比較表を以下に置いておく。
というワケで、
- 細かい一覧が欲しければ
require('module').builtinModules(ただしwasiは含まれない) - 使えそうな一覧が欲しければ
require('repl').builtinModules(一応require('repl')._builtinLibsでも同じ内容、ただしいずれもwasiは含まれない)
と思っておけば良いかな。
しかし、こうしてみると使ったことない組み込みモジュールもまだあるなぁ。知らないことはまだまだたくさんある。