これは主に独断的な質問です。しかし、Node コミュニティで一般的に使用されているいくつかの用語と、それらの間の事実上の違いを大まかに説明しようとします。
ノードに関連するモジュールは、Java ライブラリに関連付けるものと非常によく似ています。これは、Node ユーザーが多くのことを行っていることを発見するためのラッパーを提供します。誰もがやりたいことを実行するために、ノード ライブラリ関数のラッパーを頻繁に提供します。簡単な例は、wrench のような再帰的なファイル システム リーダーです。モジュールは、コードをモジュール化するために使用するファイルにも拡張されます。たとえば、モジュールは NPM を介してインストールされるだけでなく、標準の OOP プラクティスの下で、コード機能を分離するためにコード ベースの一部として記述する個別の JavaScript ファイルです。
require('someNPMINStalledModule')
require('./someFileInYourCodeBase.js')
どちらもモジュールです。1 つは NPM 経由でインストールされ、ノードを起動したディレクトリの node_modules ディレクトリにあります。後者の例は、ノードを起動したディレクトリにある JavaScript ファイルです。
次に、フレームワークがあります. コアでは、これらはモジュールと同じことを行いますが、より広く普及することを意図しており、ノードの使用方法を実際に変更します。Java の世界では、Express のようなフレームワークは Grails のようなものに似ています。Java で実行できることはすべて含めて実行することができますが、grails はいくつかのものをラップし、冗長でない方法で一連の作業を実行するための便利で強力なメソッド呼び出しを提供します。最終的には機能的に同等のコードになりますが、Grails では言語をもう少し一般化することで、より少ないコード行でより多くのことを達成できるようになりました。しかし、Grails が必要な機能を提供しない場合でも、ネイティブ コードを使用できます。この「数行のコード」の利点を犠牲にして、抽象化のレイヤー、追加の関数呼び出しなどを追加しました。あなたがスタイルを深く気にする人でない限り、この区別は重要ではありません. 筋金入りの ExpressJS 開発者は、コードにプレーン ノードの http サーバーを含めた場合、おそらく気に入らないでしょう。それは無効なノードであるため、またはパフォーマンスの観点からは別の理由で、コードのスタイルを台無しにします。コードでフレームワークを使用する場合は、このフレームワークで使用されているコーディング規則を使用することに固執する必要があります。しかし、wrench のようなモジュールを使用してディレクトリを再帰的に検索する場合、単一のファイルを読み取るために fs.readFile を使用することはスタイル的に完全に受け入れられます。それはあなたのコードのスタイルを台無しにします。コードでフレームワークを使用する場合は、このフレームワークで使用されているコーディング規則を使用することに固執する必要があります。しかし、wrench のようなモジュールを使用してディレクトリを再帰的に検索する場合、単一のファイルを読み取るために fs.readFile を使用することはスタイル的に完全に受け入れられます。それはあなたのコードのスタイルを台無しにします。コードでフレームワークを使用する場合は、このフレームワークで使用されているコーディング規則を使用することに固執する必要があります。しかし、wrench のようなモジュールを使用してディレクトリを再帰的に検索する場合、単一のファイルを読み取るために fs.readFile を使用することはスタイル的に完全に受け入れられます。
次に、ファイルの提供などの簡単なことをすばやく起動できるモジュールであるミニアプリケーションがあります。例: http-server は、単純なコマンド ラインで、任意のポートにファイルのディレクトリをサーバーします。独自のコードで「require」を使用してそれらを使用することはありませんが、このタイプのモジュールは正直なところ、ノードが提供する最も有用なものの一部になる可能性があります。いくつか使用することを強くお勧めします。(Nodemon、http-server、および grunt は、開発作業を容易にするのに役立ついくつかの非常に有用なモジュールの例です)
最後に、ネイティブ拡張があります. Node が提供する並行性は、V8 バックエンドから得られます。純粋な Javascript でこれを複製することは不可能であり、真に非同期のコードを記述する唯一の方法は、Node API によって提供される非同期操作を利用するか、process.nextTick で非常に不安定なロジックを実行するか、子プロセスを fork するか、ネイティブ拡張を記述することです。ネイティブ拡張機能は、Node が提供しない真の同時操作を提供します。データベース通信が最もわかりやすい例ですが、スレッドを生成して作業を行う C++ 拡張機能は誰でも開発できます。「threads a gogo」と呼ばれる Javascript のビットを処理するためにスレッドを起動する非常に便利なモジュールもあります。これにより、真の並行作業の開始が簡素化されますが、そのようなことが必要な立場にある場合は、ユースケースに間違った言語を使用しています。最終的に、これらはモジュールと使用方法に違いはありませんが、NodeJS API によって提供されない I/O タイプの操作に対して追加の並行メソッドを提供できるという事実を認識することは、ユニークで非常に重要な違いです。