2

./libname1 つのメイン ファイルmain.jsと、メイン オブジェクトで時折使用される複数のオプション ライブラリ ファイルを含むライブラリを作成するa.jsとしb.jsます。

index.js次のファイルを作成します。

exports.MainClass = require('main.js').MainClass; // shortcut
exports.a = require('a');
exports.b = require('b');

そして今、次のようにライブラリを使用できます。

var lib = require('./libname');
lib.MainClass;
lib.a.Something; // Here I need the optional utility object
lib.b.SomeOtherThing;

ただし、これは、'a.js' と 'b.js' を本当に必要なときにではなく、常にロードすることを意味します。

確かに、オプションのモジュールを で手動でロードできますが、きれいなドット表記require('./libname/a.js')が失われます :)lib.a

ある種のインデックス ファイルを使用してオンデマンドの読み込みを実装する方法はありますか? package.jsonひょっとして、ここでうまく魔法が使えるかも?

4

2 に答える 2

3

これは、追加モジュールをオンデマンドで動的にロードするために「MainClass」を呼び出した場合に可能になる可能性があります。しかし、これは、モジュールにアクセスするための API の調整も意味するのではないかと思います。

あなたの動機は、「不要なモジュール」によって使用される余分な処理を「回避」することだと思います。ただし、Node はシングル スレッドであるため、モジュールをロードするメモリ フットプリントは接続ごとではなく、プロセスごとであることを忘れないでください。モジュールのロードは、それをメモリに入れるための 1 回限りの作業です。

言い換えれば、モジュールは、誰かがリクエストを行うたびにではなく、サーバーを起動したときにのみロードされます。

処理と http 要求の両方を節約する必要がある場合にスクリプトをロードすることが利点であるクライアント側プログラミングからこれを見ていると思います。

サーバー上で最も節約できるのは、メモリ内の余分なビット数です。

于 2012-08-27T09:58:05.000 に答える
2

唯一の方法はゲッターを使用することのようです。要するに、このように:

exports = {
    MainClass : require('main.js').MainClass,
    get a(){ return require('./a.js'); },
    get b(){ return require('./a.js'); }
}
于 2012-08-27T11:04:45.857 に答える