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
は含まれない)
と思っておけば良いかな。
しかし、こうしてみると使ったことない組み込みモジュールもまだあるなぁ。知らないことはまだまだたくさんある。