我目前有两个脚本。第一个脚本收集大量数据并将其放在表中以便导出:
exports.bigDataTable = dataTable;
第二个脚本需要这样的数据:
refinedDataTable = require('./script1.js').bigDataTable;
执行这些行时实际发生了什么? exports
是否可以为想要它的人提供这些数据,即使他们没有特别要求它?或者只有执行require
的脚本才能获取数据?
同时,运行require
是否实际执行了需要数据的整个脚本?或者它是否仅在导出数据的脚本先前已运行时才获取导出的数据?
我的问题是数据生成脚本有一个setInterval部分,它基本上会反复更新dataTable。使用此数据的第二个脚本也使用setInterval来更新它的dataTable副本。我认为我的更新和读取存在冲突问题,但需要了解exports
和require
实际执行的操作。
任何信息都将受到赞赏。
感谢。
答案 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