Node.js“需要” - 它究竟做了什么以及如何做?

时间:2017-08-28 11:18:04

标签: node.js

我目前有两个脚本。第一个脚本收集大量数据并将其放在表中以便导出:

exports.bigDataTable = dataTable;

第二个脚本需要这样的数据:

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

执行这些行时实际发生了什么? exports是否可以为想要它的人提供这些数据,即使他们没有特别要求它?或者只有执行require的脚本才能获取数据?

同时,运行require是否实际执行了需要数据的整个脚本?或者它是否仅在导出数据的脚本先前已运行时才获取导出的数据?

我的问题是数据生成脚本有一个setInterval部分,它基本上会反复更新dataTable。使用此数据的第二个脚本也使用setInterval来更新它的dataTable副本。我认为我的更新和读取存在冲突问题,但需要了解exportsrequire实际执行的操作。

任何信息都将受到赞赏。

感谢。

1 个答案:

答案 0 :(得分: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

上找到详细的文档