2017-08-28 114 views
0

我目前有兩個腳本。第一個腳本收集一組數據,並將其在表中導出:Node.js「需要」 - 它究竟做了什麼以及如何做?

exports.bigDataTable = dataTable; 

第二個腳本需要這個數據像這樣:

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

這些行執行時什麼是實際發生的? exports是否允許任何需要它的人使用該數據,即使他們沒有明確要求它?或者只執行require的腳本獲取數據?

同時運行require實際執行數據所需的整個腳本嗎?或者只有在導出數據的腳本先前已經運行的情況下,它纔會獲得要導出的數據?

我的問題是,數據生成腳本有一個setInterval部分,基本上隨着時間的推移基本上重複更新dataTable。使用這些數據的第二個腳本也使用setInterval來更新它的dataTable副本。我認爲我遇到有衝突的更新和閱讀的問題,但需要了解exportsrequire實際執行的操作。

任何信息將不勝感激。

謝謝。

+0

你可以閱讀「在行動節點JS」 – 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 

你可以找到require的詳細的文件和模塊here

+0

這解釋了我在實驗中看到的一些行爲,但我將不得不閱讀並嘗試更多。目前我的代碼在其他地方顯然存在問題,哈哈。謝謝! – Mattaus