2016-05-05 4 views
1

私はnodejsモジュールシステムの仕組みを研究しています。再評価を避け、 `require 'で呼び出されたオブジェクトを動的にアンロードする

  1. https://nodejs.org/api/modules.html
  2. http://fredkschott.com/post/2014/06/require-and-the-module-system/
  3. http://www.bennadel.com/blog/2169-where-does-node-js-and-require-look-for-modules.htm

それはまだこれらの疑問を持っているされて、私はしかし、いくつかのポイントを理解するのに役立ちます:

私はこれまでのところ、この文献を見つけました

  • モジュール内に高価なリソース(データベースプーリング接続を考えてみましょう)がある場合、モジュールを再度要求することでリソースを再評価していないことを確認する方法を教えてください。
  • ディスポーザブルリソースを既に 'require'と呼んだら、そのディスポーザブルリソースを動的にアンロードできますか?

私はデータベースプールの単一のインスタンスがあることを確認する必要があるいくつかのシナリオがあるので、重要です。このため、私は高価なリソースを必要とするのではなく、パラメータを受け取ることができるモジュールをエクスポートしています。

ご指摘いただきありがとうございます。 http://bites.goodeggs.com/posts/export-this/#singleton

あなたはモジュールがエクスポートすることができます何のためにオプションのリストを勉強すれば:

+3

モジュール内のリソースの作成場所によって異なります。モジュール自身の/ topスコープ内に作成されている場合は、[ノードプロセスごとに1回存在します](https://nodejs.org/api/modules.html#modules_caching)。リソースがモジュール内の 'function'内に作成された場合、Nodeのモジュールシステムにかかわらず、その関数が呼び出されるたびに作成されます(関数が[引数をメモする](https://en.wikipedia 。org/wiki/Memoization))。 –

+1

モジュールを作成し、出力を観察するために 'console.log'を使って、そして物事が評価されるときに、この情報を自分で見つけることができます。 –

答えて

1

アロンSalontはここに(あなたがrequire()を呼び出すときにアクセスしているものである)NodeJSにご理解exportsするための優れたガイドを書きましたあなたの質問に対する答えは、モジュールがどのように書かれているかによって決まります。 requireを呼び出すと、NodeJSはそのキャッシュにロードされているモジュールを探し、既に別の場所にロードされている場合はそれを返します。

これは、シングルトンパターンをエクスポートするか、サルペッチするか、グローバルオブジェクトを作成する(あなたの場合は最初のもののみを推奨する)場合は、1つの共有オブジェクトのみが作成されるか存在することを意味します。シングルトンパターンは、多くのモジュールで共有したいデータベース接続のようなものに適しています。親/呼び出し元を介してこれらの依存関係を「注入」する方が良いと主張する人もいますが、これはすべてが共有していない哲学的な見解であり、シングルトンはこのような共有サービスタスクのためにソフトウェア開発者によって広く使用されています。

通常、関数をエクスポートすると、require()はコンストラクタを1つだけ返します。しかし、この場合、関数への参照は、関数が返すものではありません。 require()はあなたのために関数を実際に呼び出すわけではありません。ここで実際に作業するには、関数を呼び出す必要があります。これは、モジュールが提供するすべてのクラスのインスタンスを持つことを意味する各モジュールを意味します。requiresこのパターンは、より現実的なものであり、クラスインスタンスが望ましい/目標です。ほとんどのNPMモジュールはこのカテゴリに適合しますが、シングルトンはあなたのケースでは悪い考えです。

関連する問題