#はじめに
普段、Node関連の記事を書いていたり、業務で説明をする時などに、曖昧になりやすい パッケージ と モジュール の違いについて公式のドキュメントをもとに簡単にまとめます。
#npmにあるのはパッケージなのかモジュールなのか
The npm registry contains packages, many of which are also Node modules,
公式にはnpmレジストリーにはパッケージが含まれており、その多くはNodeモジュールです。
#そもそもパッケージとは何なのか
A package is a file or directory that is described by a package.json file.
パッケージとは package.json
によって記述されるファイルもしくはディレクトリのことを指します。
#そもそもモジュールとは何なのか
A module is any file or directory in the node_modules directory that can be loaded by the Node.js require() function.
モジュールとは、Node.jsの require
機能によって呼び出すことができる node_modules
内のファイルまたはディレクトリのことを指します。
To be loaded by the Node.js require() function, a module must be one of the following:
・ A folder with a package.json file containing a "main" field.
・ A folder with an index.js file in it.
・ A JavaScript file.
モジュールとして require
機能によって読み込まれる為には、次のいずれかである必要があります。
-
package.json
を含むフォルダーであり、main
フィールドを含むファイルであること。 -
index.js
というファイルが入っているフォルダであること。 -
JavaScript
ファイルであること。
#結局のところ何が違うのか
npm経由でインストールされたパッケージは、ほとんどがファイルの中でロードされて使用されます。
つまり、これらはモジュールと言えるでしょう。
#モジュールに該当しないパッケージもある
npm経由でインストールされるパッケージは、ほとんどがファイルの中でロードされる為、モジュールであると書きましたが、中にはターミナルなどのコマンドラインで実行するパッケージもあると思います。
このように main
フィールドを持たないパッケージはモジュールとは言えません。
#まとめ
長々と書きましたが、簡潔にかくと以下のようになります。
ファイルの中でrequire
して読み込みNode.jsが使用するmain
フィールドが含まれていればモジュールという認識でOK