0

プロジェクト構造のルートにモジュール (server.js) があります。libというディレクトリにモジュールが含まれています。

var mongo = require('./lib/MongoUtils');

lib ディレクトリ内の別のモジュールも「MongoUtils」モジュールを必要とするため、次のようになります。

var mongo = require('./MongoUtils');

問題は、オブジェクトのコピーが 2 つになってしまうことです (DB 接続などのシステム リソースがあるため、これは問題です)。

Node.js キャッシュに関する警告のドキュメント ( http://nodejs.org/api/modules.html#modules_module_caching_cafeats )を読んだので、2 つの異なるパスを持つ同じモジュールを参照していることが問題のようです。 Node.js は 2 つのコピーを提供します。この理解は正しいでしょうか?

どうすればこれを回避できますか? モジュールをnode_modulesにダンプしたくありませんでした。これは、package.json(および.gitignore-d)を介してnpmによって管理されているためです。ローカル モジュールを package.json に入れることを考えました (それが可能であると仮定します) が、変更を加えるたびに「npm install」を実行する必要があります。

これがきれいにできない場合は、モジュールを 1 か所にロードして渡すだけですが、多くのモジュールでこれが発生すると、スケーラブルとは言えません。

4

1 に答える 1

1

私はそれを解決しました。モジュールの 1 つの大文字化をタイプミスしたことが判明しました。Node.js は喜んでモジュールをロードし、正常に動作しました。唯一の副作用は、モジュールが 2 回ロードされたことです。

これが例です。lib1.js の require ステートメントの大文字の B に注意してください。

main.js:

var lib1 = require('./lib/lib1')
    , lib2 = require('./lib/lib2');

lib/lib1.js:

var lib2 = require('./liB2');

lib/lib2.js:

function MyClass() {
    console.log('Constructor called');
}

module.exports = new MyClass();

「node main.js」を実行すると、次の出力が得られます。

Constructor called
Constructor called

lib1.js で大文字の B を修正して再度実行すると、次のように表示されます。

Constructor called
于 2013-09-30T16:49:19.577 に答える