2017-08-28 82 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