0

node.jsのモジュールをグローバルにするのは悪い考えだったという別の質問を読んだ後、node.jsの変更のために彼は答えを変更しました

github の express.js の例に例が示されるようになりました。 https://github.com/visionmedia/express/tree/master/examples

では、sequelize や async など、複数のファイルで同じモジュールが必要な場合はどうすればよいでしょうか?

app.js:

var document = require('./routes/document')
async = require('async');

/routes/document.js:

async.series([...]);

また

app.js:

var document = require('./routes/document')
var async = require('async');

/routes/document.js:

var async = require('async');
async.series([...]);

document.js で async モジュールを再度必要とするか、新しいファイルで必要とせずに使用できるように async グローバルにする必要がありますか?

4

3 に答える 3

2

モジュールへのアクセスにグローバルを使用しないでください。常にrequireを使用し、その.jsファイルで必要なモジュールのみをrequire()します。Requireは、モジュールを1回だけロードし、そのモジュールへの参照を保持します。

複数のモジュールであっても、必要なものだけを要求することは、コードの依存関係が明確になり、後でコードを再構築するのに役立つ可能性があるため、適切です。

必要なものだけをrequired()することも、あるモジュールを別のモジュールに交換したいときに役立ちます。たとえば、knox(S3)を新しいaws-sdkモジュールに置き換えることができます。knox npmモジュールを削除すると、requireはknoxを使用/必要とするファイルですぐに爆発します。グローバル変数の場合は、そのグローバル参照へのすべての参照を検索し、IDEまたはテキストエディタに依存して検索する必要があります。

于 2013-02-26T08:34:52.853 に答える
1

つまり、各ファイルに含めます。ファイルは最初の require の後にキャッシュされるため、コンテンツは実際には 1 回だけ実行されます (これは、require にログ ステートメントを入れることでテストできます。これは 1 回だけ表示されます)。

私がしていることは、必要な他のすべてを必要とする 1 つのファイルを作成し、それらすべてをエクスポートすることです。次に、必要なファイルは 1 つだけです。これは、含めるモジュールが多数ある場合に非常に便利です。

于 2013-02-26T07:50:37.593 に答える
0

モジュールを複数回要求しても問題はありません。必要なファイルを内部的requireに 1 回だけ実行し、結果をキャッシュします。詳細については、Node.js モジュールのドキュメントを参照してください。

于 2013-02-26T07:54:44.230 に答える