20

私はNodeJSに少し慣れていません。多分それはそれが機能する方法ですが、確かに:

私の「index.js」:

var fs = require('fs');
// do something with fs here
var app = require('./app.js');

「app.js」

fs.readFile('/somedir/somefile.txt', 'utf8', function (err,data) {
  if (err) {
    return console.log(err);
  }
  console.log(data);
});

次に、エラーが発生します。

ReferenceError: fs is not defined

私が読んだように、これに対する「解決策」は、app.js で fs-module を「再要求」することです。今私が理解しているのは、fs-moduleがキャッシュされていることです(任意のモジュールですが、例を使用しています)ので、Nodeは依然として非常に高速です。私が実際に得られないのは、「fs-module がキャッシュされている場合、実際にはとにかく利用可能であるのに、なぜモジュールを「再要求」しなければならないのですか?

正直に言います。理由を理解するだけです。

4

2 に答える 2

36

各ファイルにはモジュールへの参照を含める必要があります

index.js

var fs    = require("fs"),
    other = require("./otherfile"); 

// you can now use `fs`

otherfile.js

var fs = require("fs");

// you can now use `fs` here

これに関する最も優れた点の 1 つは、任意のファイルで特定の方法で変数に名前を付けることに縛られないことです。すべてのファイルは、ライブラリ内の他のすべてのファイルからほとんど分離されています。これは非常に良いことです。

また、必要に応じてモジュールの一部のみを含めることができることも知っておいてください

var read = require("fs").readFile;

read("myfile.txt", function(err, data) {
  if (error) {
    return throw error;
  }
  console.log(data);
};

説明:

Node.js はグローバルの使用を推奨しません。そのため、グローバル変数に依存するものを実装しようとすべきではありません。

モジュールを再度呼び出すとfs、キャッシュされたモジュールを指す変数を宣言するだけなので、実際には「再要求」することはありません。


追加の例:

この回答では、グローバルの使用を回避するシンプルなアプリを構築する方法について詳しく説明します。

于 2013-08-27T16:17:08.407 に答える