1

私は3つのファイルを持っています

B には A が必要です

C は (B と A) を必要とします

このシナリオでは、C は A を要求する必要がありますか? 疑わしいのは、B が既に A を必要としており、C が B を必要とする場合、A も必要とする必要があるためです。

したがって、 c が明示的に A を要求する必要があるかどうかを確認したいだけです。

同じ状況で、明示的に A を要求した場合:

次のエラーが見つかりました:

module.js:340
    throw err;
    ^
Error: Cannot find module 'A'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/Users/topi/controller.js:3:13)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)

これはなぜですか?

4

2 に答える 2

3

ほとんどの場合、はい。別のモジュールへの参照が必要な各モジュールは、require()個別に参照する必要があります。

なぜそうなのか?

使用する場合:

var a = require('./a');

これは、現在のモジュールへのローカル変数として宣言aされ、すべて独自のクロージャー内で評価されます。これが、モジュールが「 public」 APIexportsを指定できるようにする必要がある理由です。

これは、各モジュールがその依存関係 (およびcに依存するなど) をリストする必要があるためであると示唆することもできます。ab

// c.js
var a = require('./a');
var b = require('./b');

ただし、あるモジュールを別のモジュールexports渡すために使用できます。たとえば、次のようにabます。

// b.js
var a = exports.a = require('./a');
// c.js
var b = require('./b');

console.log(b.a);

また、技術的には、 にアタッチaすることもできますglobal。ただし、一般的にはすべきではありません。そうすることは、通常、コードの匂いと見なされます。

于 2013-09-04T07:04:03.487 に答える
0

はい、個人としての作業が必要です。node.jsのクラスシステムは、他のサーバー側またはoop言語とは異なります。

var a = require('./a');


 var b = require('./b');

これをしなければならない

于 2013-09-04T07:13:37.697 に答える