2017-08-28 7 views
0

私は現在2つのスクリプトを持っています。最初のスクリプトは、データの束を収集し、輸出用のテーブルにそれを置く:Node.js "require" - 正確に何を行うのですか?

exports.bigDataTable = dataTable; 

2番目のスクリプトはそうのように、このデータを必要とします。

refinedDataTable = require('./script1.js').bigDataTable; 

これらの行が実行されたときに実際に何が起こっていますか? exportsは、特に必要としない場合でも、そのデータを誰でも利用できるようにしますか?または、requireを実行しているスクリプトだけがデータを取得しますか?

同時に、requireを実行すると、データが必要とされているスクリプト全体が実際に実行されますか?または、データをエクスポートするスクリプトが以前に実行されていれば、エクスポートされるデータのみを取得しますか?

私の問題は、データ生成スクリプトには基本的に繰り返しdataTableを更新するsetIntervalセクションがあることです。このデータを使用する2番目のスクリプトでも、setIntervalを使用してdataTableのコピーを更新します。矛盾したアップデートや読み込みで問題が発生していると思いますが、exportsrequireが実際に何を行うのかを理解する必要があります。

いずれの情報もありがとうございます。

ありがとうございました。

+0

に関する詳細なドキュメントを見つけることができます – Tarptaeya

答えて

4

exportsは、ファイルの最後に「返された」オブジェクトです。実際の変数はmodule.exportsです。このため、module.exports = something;と書く必要があります。 exports = something;module.exports変数を変更しないためです。

require('file.js')を使用すると、file.jsが実行され、module.exports変数が戻されます。この値はキャッシュされます。次にrequire('file.js')に電話すると、同じオブジェクトが表示されます。 file.jsは再度実行されません。

が、これは、同一の参照とまったく同じオブジェクトであることに留意してください:

var a = require('test.js'); 
a.foo = 42; 
console.log(a.foo); // 42 

var b = require('test.js'); 
b.foo = 30; 

console.log(b.foo); // 30 
console.log(a.foo); // 30 

あなたは「アクション内のノードのjs」を読むことができるrequireとモジュールhere

+0

これは私の実験で見た振る舞いのいくつかを説明していますが、もう少し読んで実験しなければなりません。現時点では私のコードのどこかに明らかに問題があります。ありがとう! – Mattaus

関連する問題