import fs from 'node:fs'
Node.jsのコアモジュールをインポートする際、node:fs
のようにnode:
というプレフィックスを付けた書き方をよく目にします。 なぜnode:
を付けるような書き方をしているのか理解していなかったので、調べてみました。
コアモジュールとは
コアモジュールとは、Node.jsが提供している組み込みモジュールのことを指します。つまり、npm install
で追加しなくても使えるモジュールのことです。 ファイルを扱うfs
やイベントエミッターを提供するevents
、ファイルパスを操作するpath
などがあります。
コアモジュールはNode.jsのプロジェクトのlib
に実装されています。 これらの関数はブラウザには実装されていませんが、バンドルツールがlib
を参照することによってフロントエンドのプロジェクトでも使うことが可能です。
node:プレフィックスはいつから使えるようになったのか?
Node.jsの最新のドキュメントを見ると、どれもnode:
プレフィックスを付けてコアモジュールが読み込まれています。 導入されたのは結構前で、v14の時から使えるようになったようです(リリースノート)。
導入の背景
node:
プレフィックスが導入された目的は、コアモジュールとサードパーティのモジュールを明確に区別するためです。 コアモジュールにはquerystring
というパッケージがありますが、npmにも同じ名前のパッケージが存在しており、ややこしい状況になっていました。
また、node:
プレフィックスが導入されたことによって、コアモジュールのパッケージ名の選択肢が広がっています。 Node.jsのv18から提供されているnode:test
パッケージは、test
という一般的な名前がパッケージ名に付けられています。 これは、node:
プレフフィックスが導入され、コアモジュールであることを明示的に示せるようになったことが影響しています。
今後追加されるパッケージは、node:
プレフィックスを付けないとインポートできないとされています。 node:
プレフィックスが使える環境でコアモジュールをインポートする際は、デメリットがないので、基本的にnode:
プレフィックスを付けた方が好ましいです。