したがって、Node.jsでは、このような各ファイルは接続可能なモジュールです。
接続は、ファイルパスを渡す必要がある
require
関数を呼び出すことによって行われます。
var authModule = require('./auth');
このコードは認証モジュールを接続し、
authModule
変数を通じてアクセスできるようにします。
require
関数に渡されるパラメーターに応じて、モジュールを接続するためのアルゴリズムは異なります。 それでは、Node.jsでモジュールを接続する原則を見てみましょう。 この情報はすべてドキュメントに記載されています 。
Node.jsとともに、いくつかの組み込みモジュールが提供されます。これらのモジュールには、モジュール名を指定するだけです。
var http = require('http'); var cluster = reqiure('cluster');
名前が
require
関数に渡される場合、組み込みモジュールは他のすべてのモジュールよりも優先されることに注意してください。 そのため、たとえば
require('http')
は、その名前のサードパーティモジュールまたはその名前のファイルが存在する場合でも、常に組み込みモジュールを返します。 すべての組み込みモジュールとそれらに関するドキュメントのリストは、 サイトで見つけることができます。 これらのモジュールのソースは、プロジェクトリポジトリで表示できます 。
モジュールの名前が送信され、組み込みでない場合、モジュールは
node_modules
フォルダーから接続されます。 このフォルダーには、 NPMを使用して追加されるすべてのモジュールがあります。 NPMはNode.jsのパッケージマネージャーで、サードパーティのモジュールを簡単に見つけて接続できます。 この記事の執筆時点では、すでに89 503モジュールが含まれていました。
node_modules
あるモジュールを接続するには
node_modules
その名前を指定するだけです。
var express = require('express'); var async = require('async');
そのようなコードが
'/var/www/demo'
フォルダーから呼び出されたときの状況を見てみましょう。Node.jsは、次のフォルダーで指定されたモジュールを見つけようとします。
/ var / www / demo / node_modules / var / www / node_modules / var / node_modules / node_modules
Node.jsは再帰的に、親フォルダーに
node_modules
する
node_modules
に、目的のモジュールを持つ
node_modules
フォルダーを探します。 NPMでは、モジュールをグローバルにインストールすることもでき(
npm install -g MODULE
)、どこからでも利用できます。
別の接続オプションを検討してください
../
関数に渡されたパラメーターが
../
、または
./
で始まる場合、接続ファイルは絶対パスに沿って、または現在のフォルダーに対して相対的になります。
var logger = require('../lib/logger'); var profiler = require('/var/lib/profiler');
まず、チェックされるか、指定された名前と
.json
に一致する名前のファイルがあります。そのようなファイルが見つからない場合、Node.jsは、名前に
.js
、
.json
、および
.json
異なる拡張子を追加してファイルを接続しようとします。
したがって、
require('./lib/users.js')
と
require('./lib/users')
同じモジュールに接続するため、拡張子の付いたファイルを指定する必要はありません。
モジュールは非常に大きくなる可能性があるため、モジュールコードをより適切に整理するために、いくつかの部分を個別のファイルに配置する必要がある場合があります。 また、これらのファイルはこのモジュールでのみ使用されるため、他のモジュールの中にある必要はありません。 この問題を解決するために、Node.jsには、すべてのモジュールファイルが配置されるフォルダーとしてモジュールを整理する機能があります。 このようなモジュールを接続するには、このフォルダーのパスを
require
関数に渡すだけです。
モジュールがあり、そのうちの1つの
logger
がファイルを含むフォルダーとして表示されていると想像してください。
┌─auth.js ├─user.js └─ロガー ├─index.js ├─console.js ├─package.json ├─config.js └─db.js
logger
モジュールの接続は、このフォルダーへのパスを渡すだけです。
var require('./logger');
次に、Node.jsは、どのフォルダーファイルがモジュールのエントリポイントを表すかを判断しようとします。 最初に、
package.json
ファイルがチェックされるか、フォルダーに存在します。このフォルダーには、接続するファイルの名前が
main
フィールドに表示されます。
{ main: "./console.js" }
この場合、ファイル
'./logger/console.js'
がロードされます。
package.json
ファイルがない場合、Node.jsは
'./logger/index.js'
または
'./logger/index.node'
'./logger/index.js'
うとし
'./logger/index.node'
。
プラグインが完成したら、それらに関連するいくつかの興味深い点を考えてみましょう。 モジュールの接続方法に関係なく、モジュールは接続直後にキャッシュされます。 これは、モジュールが何回接続されても、そのコードは一度だけ実行されることを意味します。
モジュールを呼び出すたびにキャッシュから削除すると、この動作を変更できます。
delete require.cache[ module ];
module
は、
module
を接続する
require
関数を
require
するために渡したパラメーターです。
したがって、モジュールが接続されるたびに何かを行う必要がある場合は、キャッシュをクリアするか、ジョブを完了するために呼び出す必要がある関数を返す必要があります。
モジュールが見つかった完全なパスを取得するには、
require.resolve
関数を使用できます。
var modulePath = require.resolve('express');
この機能は、異なるバージョンのモジュールを複数の場所にインストールしたことがあり、正しいバージョンが接続されていることを確認する必要がある場合に使用できます。 接続するファイルがあるフォルダーに移動し、コマンドラインから操作モードでNode.jsを実行し、目的のモジュールで関数を呼び出す必要があります。 もちろん、この状況は、プロジェクト構造を修正する必要があることを意味し、すべてのプラグインをプロジェクトのルートフォルダーに移動することをお勧めします。
NPMを介してインストールされたモジュールファイルの1つを接続する場合にも、この機能を使用できます。
var package = require.resolve('express/package.json');
node_modules
フォルダーが目的のモジュールとともにどこにあるかわからないため、Node.jsがすべての可能なモジュールの場所を通過するという事実を利用できます。
require
関数には、これらすべてに加えて、別の便利なプロパティ
main
ます。 コマンドラインから起動されたモジュールを保存します。 したがって、どのモジュールからでも、このモジュールが直接起動されたか、別のモジュールの依存関係として接続されたかを確認できます。
前述の
require
関数に加えて、モジュールオブジェクトは各
module
使用でき
module
。 このオブジェクトの主なタスクは、モジュールがその実行結果を返すことができるようにすることです。 オブジェクト、関数、または文字列(任意のデータ型)にすることができます。
module
オブジェクトには
exports
プロパティがあり、モジュールから返すすべてのものを割り当てる必要があります。 モジュールを接続した結果として返されるのは
module.exports
です。
module.exports.createUser = function () { return new User(); }
このコードでモジュールを接続した後、応答にはこのメソッドを持つオブジェクトが含まれます。
短いバージョンの
exports
変数を使用することもできます。これは、基本的に
module.exports
への単なる参照
module.exports
。
exports.createUser = function () { return new User(); }
これはリンクであるため、2つのオプションには1つの重要な違いがあります。 モジュールの結果は
module.exports
オブジェクトを介してのみ返されるため、
exports
変数に異なる値を割り当てた場合、
module.exports
参照しなくなり、モジュールは何も返しません。
ただし、
module.exports
自体は変更できます。 たとえば、オブジェクトの代わりに、関数を返すことができます。そうすると、モジュールの結果は、何らかの関数形式のメソッドを持つオブジェクトではなく、関数自体になります。
module
を使用
module
と、コマンドラインから特定のモジュールが起動されているかどうかを確認することもできます。 これを行うには、
module.parent
プロパティを確認します
module.parent
である必要があります。
Node.jsのモジュールを使用するには、この情報で十分だと思います。 Node.jsのすべてのプロジェクトで対処する必要があるため、 NPMに精通することもお勧めします。